3

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

.../testApp.cpp:75: 错误:'const char*' 和'const char [5]' 类型的无效操作数到二进制'operator+'

这是有问题的行:

    string path = "images/" + i + ".png";        

这似乎是一个相当简单的问题,但它让我感到困惑。我还包括了字符串标题:

#include <string>
using namespace std
4

6 回答 6

5

boost::format

std::string str = (boost::format("images/%d.png") % i).str();

boost::format(FORMATTED_STIRNG) % .. %.. %..用于格式化字符串处理,请参阅wiki。这个函数给你一个特殊的 boost 格式,你需要使用它的.str()成员函数将其转换为 std::string。

于 2012-05-29T13:31:20.147 回答
4

您需要转换istd::string

string path = "images/" + boost::lexical_cast<string>(i) + ".png";

有关将 an 转换int为 a 的其他方法,std::string请参阅将 int 附加到 std::string

于 2012-05-29T13:29:30.353 回答
3

使用 astringstream代替,std::string不支持整数的现成格式。

std::stringstream ss;
ss << "images/" << i << ".png";
std::string path = ss.str();
于 2012-05-29T13:29:27.833 回答
2

You are trying to concatenate string literals as if they are std::string objects. They are not. In C++ string literals are of type const char[], not std::string.

To join two string literals, place them next to each other with no operator:

const char* cat = "Hello " "world";

To join two std::string objects, use operator+(std::string, std::string):

std::string hello("hello ");
std::string world("world\n");
std::sting cat = hello + world;

There is also an operator+ to join a string literal and a std::string:

std::string hello("hello ");
std::string cat = hello + "world\n";

There is no operator+ that takes std::string and int.

A solution to your problem is to use std::stringstream, which takes any operator<< that std::cout can take:

std::stringstream spath;
spath << "images/" << i << ".png";
std::string path = spath.str();
于 2012-05-29T13:25:48.513 回答
1

使用 C++11,我们得到了一组to_string函数,可以帮助将内置数字类型转换为 std::string。您可以在转换中使用它:

string path = "images/" + to_string(i) + ".png";         
于 2012-05-29T13:58:17.317 回答
0

引用所有其他答案,是的,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!";
于 2012-05-29T13:38:13.490 回答