连接字符串 (C++) 时出错

Error when concatenating strings (C++)

本文关键字:出错 C++ 字符串 连接      更新时间:2023-10-16

我正在尝试创建一个指向文件的字符串,但收到此错误:

.../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

请改用stringstreamstd::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::stringoperator+

std::string hello("hello ");
std::string cat = hello + "worldn";

没有需要std::stringint 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 &param1, 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!";