C++错误 - 表达式必须具有整数或枚举类型 - 从带有连接的字符串中获取?

Sup*_*Cow 16 c++

C++错误表达式必须具有整数或枚举类型从串联的字符串中获取?

所以在toString()C++的类中我有代码:

string bags = "Check in " + getBags() + " bags";
Run Code Online (Sandbox Code Playgroud)

我以为我可以声明这样的字符串?(我来自Java背景并试图学习C++).将bags在Visual Studio中,虽然强调和问题是:

表达式必须具有整数或枚举类型.

getBags()只是返回一个int.

发生这种情况的另一个例子是:

string totalPrice = "Grand Total: " + getTotalPrice();
Run Code Online (Sandbox Code Playgroud)

getTotalPrice()返回a float并且是带有错误的下划线.

但是如果我输入一行如下:

string blah = getBags() + "blah";
Run Code Online (Sandbox Code Playgroud)

没有错误.

我在这里不理解什么?

Fer*_*cio 16

"Check in "实际上是一个const char *.添加getBags()(an int)会产生另一个const char*.生成编译器错误是因为您无法添加两个指针.

你既需要转换"Check in "getBags()串联之前为字符串:

string bags = std::string("Check in ") + std::to_string(getBags()) + " bags";
Run Code Online (Sandbox Code Playgroud)

" bags"将被隐式转换为string.

  • @aquirdturtle - 是的,``Check in"`将被隐式转换为`std :: string`,因此不需要显式转换. (2认同)

SHR*_*SHR 6

当使用 + 附加字符串时,第一个元素必须有 operator+,而 const char* 没有。

因此,您应该从中制作一个字符串:

string bags = string("Check in ") + getBags() + " bags";
Run Code Online (Sandbox Code Playgroud)

或按以下步骤操作:

string bags = string("Check in ") + getBags() + " bags";
Run Code Online (Sandbox Code Playgroud)

编辑: 更多的问题是从方法返回的 int,出于某种原因,字符串没有用于 int 的 operator+。

所以你最好像这样使用 stringstream:

#include <sstream>
....
ostringstream s;
s<<"Check in " << getBags() << " bags";
string bags = s.str();
Run Code Online (Sandbox Code Playgroud)