连接字符串 (C++) 时出错
Error when concatenating strings (C++)
我正在尝试创建一个指向文件的字符串,但收到此错误:
.../testApp.cpp:75:错误:类型为"const char*"和"const char [5]"的操作数无效,变为二进制"operator+"
这是有问题的行:
string path = "images/" + i + ".png";
这似乎是一个相当简单的问题,但它让我感到困惑。我还包含了字符串标头:
#include <string>
using namespace std
或 boost::format
:
std::string str = (boost::format("images/%d.png") % i).str();
boost::format(FORMATTED_STIRNG) % .. %.. %..
用于格式化字符串处理,请参阅 wiki。 此函数为您提供了一种特殊的提升格式,您需要使用其 .str()
成员函数将其转换为 std::string。
将i
转换为std::string
:
string path = "images/" + boost::lexical_cast<string>(i) + ".png";
有关将int
转换为std::string
的其他方法,请参阅将 int 附加到 std::string
请改用stringstream
,std::string
不支持整数的现成格式。
std::stringstream ss;
ss << "images/" << i << ".png";
std::string path = ss.str();
您正在尝试连接字符串文本,就好像它们是std::string
对象一样。他们不是。在C++字符串文字的类型是const char[]
,而不是std::string
。
若要联接两个字符串文本,请将它们并排放置,不带运算符:
const char* cat = "Hello " "world";
要联接两个std::string
对象,请使用operator+(std::string, std::string)
:
std::string hello("hello ");
std::string world("worldn");
std::sting cat = hello + world;
还有一个连接字符串文字和std::string
的operator+
:
std::string hello("hello ");
std::string cat = hello + "worldn";
没有需要std::string
和int
operator+
.
问题的解决方案是使用 std::stringstream
,它采用std::cout
可以采取的任何operator<<
:
std::stringstream spath;
spath << "images/" << i << ".png";
std::string path = spath.str();
在 C++11 中,我们得到了一组 to_string
函数,可以帮助将内置的数字类型转换为 std::string。您可以在转换中使用它:
string path = "images/" + to_string(i) + ".png";
引用所有其他答案,是的,std::string
没有内置对附加整数的支持。但是,您可以添加一个运算符来执行此操作:
template<typename T>
std::string operator +(const std::string ¶m1, const T& param2)
{
std::stringstream ss;
ss << param1 << param2;
return ss.str();
}
template <typename T>
std::string operator +(const T& param1, const std::string& param2) {
std::stringstream ss;
ss << param1 << param2;
return ss.str();
}
template <typename T>
std::string& operator +=(std::string& param1, const T& param2)
{
std::stringstream ss;
ss << param1 << param2;
param1 = ss.str();
return param1;
}
这样做的唯一真正缺点是必须首先将其中一个文本转换为字符串,如下所示:
string s = string("Hello ") + 10 + "World!";
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 为x86而非x64编译时出错
- 从R调用C++函数并对其进行集成时出错
- 这个函数哪里出错了
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 为重写std::exception的库生成swig接口时出错
- 导入/导出变量时出错
- PrintWindow函数在notepad.exe中出错