我有常数变量:字符串迭代器不兼容的错误,当我将字符串转换为矢量<byte>
#define ERROR_ME std::string("Error Message")
在功能
,我想返回的std ::矢量 所以,我写这篇文章:
return std::vector<byte>(ERROR_ME.begin(), ERROR_ME.end()); // this have error
你能帮助我吗?
我有常数变量:字符串迭代器不兼容的错误,当我将字符串转换为矢量<byte>
#define ERROR_ME std::string("Error Message")
在功能
,我想返回的std ::矢量 所以,我写这篇文章:
return std::vector<byte>(ERROR_ME.begin(), ERROR_ME.end()); // this have error
你能帮助我吗?
不,你没有“Const [sic]变量”,你有一个符号常量,在编译器本身有机会读取它之前在源代码中被替换。
的代码编译器将看到的不是
return std::vector<byte>(ERROR_ME.begin(), ERROR_ME.end());
而是
return std::vector<byte>(std::string("Error Message").begin(), std::string("Error Message").end());
也就是说,你从两个不同的和无关的物体得到begin
和end
迭代器。无关迭代器的比较或其他交互导致undefined behavior。
如果你想要一个真正的常数,然后使用例如
std::string const ERROR_ME = "Error Message";
这个返回std :: vector
请不要使用'#define'声明常量。如果你想要一个常量使用'const datatype = something;'。 – NathanOliver