如何解决在命名空间或标头中调用 std::vector::insert 函数失败
#include <vector>
#include <inttypes.h>
#include <stdio.h>
namespace test
{
std::vector<uint8_t> HEADERDATA{0x65,0x73,0x68,0x00,0x00};
std::vector<uint8_t> ADDITIONALDATA{0x00,0x02,0x00};
std::vector<uint8_t> DATA(HEADERDATA);
DATA.insert(std::end(DATA),std::begin(ADDITIONALDATA),std::end(ADDITIONALDATA));
}
int main() {return 0;}
<source>:15:1: error: 'DATA' does not name a type
15 | DATA.insert(std::end(DATA),
但是,如果我将插入移动到主函数中,它就可以工作。
int main()
{
using namespace test;
DATA.insert(std::end(DATA),std::end(ADDITIONALDATA));
}
有人可以解释这种行为吗?
解决方法
在函数体之外编写语句是不可能的。代码只能从初始值设定项中运行,这就是三个变量的定义有效的原因。
您可以使用内联 lambda 来创建和返回集合:
namespace test
{
std::vector<uint8_t> HEADERDATA{0x65,0x73,0x68,0x00,0x00};
std::vector<uint8_t> ADDITIONALDATA{0x00,0x02,0x00};
std::vector<uint8_t> DATA([](){
std::vector<uint8_t> data(HEADERDATA);
data.insert(std::end(data),std::begin(ADDITIONALDATA),std::end(ADDITIONALDATA));
return data;
}());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。