当我将字符串转换为vector <byte>时,字符串迭代器不兼容ERROR

Jac*_*k D 1 c++ vector

我有Const变量:

#define     ERROR_ME        std::string("Error Message")
Run Code Online (Sandbox Code Playgroud)

在函数中,我想返回std :: vector所以,我写这个:

return std::vector<byte>(ERROR_ME.begin(), ERROR_ME.end()); // this have error
Run Code Online (Sandbox Code Playgroud)

你能帮助我吗?

Som*_*ude 6

不,你没有"Const [sic]变量",你有一个符号常量,在编译器本身有机会读取它之前在源代码中被替换.

编译器将看到的代码不是

return std::vector<byte>(ERROR_ME.begin(), ERROR_ME.end());
Run Code Online (Sandbox Code Playgroud)

但反而

return std::vector<byte>(std::string("Error Message").begin(), std::string("Error Message").end());
Run Code Online (Sandbox Code Playgroud)

也就是说,您从两个不同且不相关的对象中获取beginend迭代器.比较或其他不相关的迭代器的交互会导致不确定的行为.

如果你想要一个真正的常数,那么使用eg

std::string const ERROR_ME = "Error Message";
Run Code Online (Sandbox Code Playgroud)