我有常數變量:字符串迭代器不兼容的錯誤,當我將字符串轉換爲矢量<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