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を参照してください。.str()この関数は、メンバー関数を使用して std::string にキャストする必要がある特別なブースト形式を返します。

于 2012-05-29T13:31:20.147 に答える
4

i次のように変換する必要がありますstd::string

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

intを aに変換する他の方法については、int を std::string に追加するstd::stringを参照してください。

于 2012-05-29T13:29:30.353 に答える
3

stringstream代わりにaを使用してくださいstd::string。整数の既成の書式設定はサポートされていません。

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

文字列リテラルをstd::stringオブジェクトであるかのように連結しようとしています。ではない。C++ では、文字列リテラルの型は でありconst char[]、 ではありませんstd::string

2 つの文字列リテラルを結合するには、演算子を使用せずに並べて配置します。

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

std::string2 つのオブジェクトを結合するには、次を使用しoperator+(std::string, std::string)ます。

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

operator+文字列リテラルと を結合するもありstd::stringます。

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

operator+とかかることはstd::stringありませんint

問題の解決策は、次std::stringstreamのものを使用するoperator<<ことstd::coutです。

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;
}

これの唯一の実際の欠点は、次のように、最初にリテラルの 1 つを文字列にキャストする必要があることです。

string s = string("Hello ") + 10 + "World!";
于 2012-05-29T13:38:13.490 に答える