std::string '+' : 不能添加两个指针
std::string '+' : cannot add two pointers
为什么赋值
std::string s="aaa"+1
工作正常,而
std::string s="aaa"+1+"bbb"
出现错误Error 14 error C2110: '+' : cannot add two pointers
没有 +
运算符来连接 C 字符串。 C 字符串只是指针 (const char *
),所以如果你向它添加一个数字,它只会增加该指针。然后将其转换为 C++ 字符串:
std::string s = "aaa" + 1
|=======|
"aa"
const char *
|==============|
"aa"
std::string
然后在第二步失败,当你尝试连接第二个字符串时,因为虽然向指针添加一个常量仍然有一定意义(即使不是在你的情况下),但你没有任何意义添加两个指针。
"aaa" + 1 + "bbb"
|========|
"aa"
const char *
|===|
const char *
为了确保您实际连接而不是对指针求和,我建议使用 stringstream
。这也确保您的常数正确转换为 string
.
std::stringstream ss;
ss << "aaa" << 1 << "bbb";
std::string s = ss.str();
这将适用于每个 operator<<
重载的类型。
std::string s="aaa"+1;
这只是编译,但很可能不会执行您想要的操作:它向 const char*
加 1,文字 "aaa"
衰减到,然后从该指针构造 std::string
, 导致 s == "aa"
.
当使用 operator+
连接字符串时,至少一个操作数必须具有类型 std::string
,另一个可以是 const char*
或可转换为该类型的东西。例如:
std::string s="aaa"+std::to_string(1);
或
std::string s="aaa"+std::to_string(1)+"bbb";
第一个有效,因为 "abc" + 1
实际上是字符串 "bc"
(更改了实际字符串以使其更易于查看)。和做例子一样简单
char array[] = "abc;
std::string str = &array[1];
第二个不起作用,因为您不能以这种方式附加两个字符串文字。您需要确保其中之一已经是 std::string
对象。
如果你想创建字符串 "aaa1"
那么我建议你看看函数 std::to_string
.
这是这方面的附加信息。
一般穷人的解决方案是让它工作一半:
void JTube::checkNode(ITCXMLNode current_node, char * tagName){
if(!current_node.d) {
string s = "XML tag missing:";
s = s + tagName;
exitreason(s);
}
}
为什么赋值
std::string s="aaa"+1
工作正常,而
std::string s="aaa"+1+"bbb"
出现错误Error 14 error C2110: '+' : cannot add two pointers
没有 +
运算符来连接 C 字符串。 C 字符串只是指针 (const char *
),所以如果你向它添加一个数字,它只会增加该指针。然后将其转换为 C++ 字符串:
std::string s = "aaa" + 1
|=======|
"aa"
const char *
|==============|
"aa"
std::string
然后在第二步失败,当你尝试连接第二个字符串时,因为虽然向指针添加一个常量仍然有一定意义(即使不是在你的情况下),但你没有任何意义添加两个指针。
"aaa" + 1 + "bbb"
|========|
"aa"
const char *
|===|
const char *
为了确保您实际连接而不是对指针求和,我建议使用 stringstream
。这也确保您的常数正确转换为 string
.
std::stringstream ss;
ss << "aaa" << 1 << "bbb";
std::string s = ss.str();
这将适用于每个 operator<<
重载的类型。
std::string s="aaa"+1;
这只是编译,但很可能不会执行您想要的操作:它向 const char*
加 1,文字 "aaa"
衰减到,然后从该指针构造 std::string
, 导致 s == "aa"
.
当使用 operator+
连接字符串时,至少一个操作数必须具有类型 std::string
,另一个可以是 const char*
或可转换为该类型的东西。例如:
std::string s="aaa"+std::to_string(1);
或
std::string s="aaa"+std::to_string(1)+"bbb";
第一个有效,因为 "abc" + 1
实际上是字符串 "bc"
(更改了实际字符串以使其更易于查看)。和做例子一样简单
char array[] = "abc;
std::string str = &array[1];
第二个不起作用,因为您不能以这种方式附加两个字符串文字。您需要确保其中之一已经是 std::string
对象。
如果你想创建字符串 "aaa1"
那么我建议你看看函数 std::to_string
.
这是这方面的附加信息。 一般穷人的解决方案是让它工作一半:
void JTube::checkNode(ITCXMLNode current_node, char * tagName){
if(!current_node.d) {
string s = "XML tag missing:";
s = s + tagName;
exitreason(s);
}
}