0

私は C++ の経験がほとんどないということから始めたいと思いますが、今学期は大学のクラスで C++ のクラスを取っています。私は Java をかなり知っていますが、C++ はほとんど知りません。

基本的に、文字列 2D 配列に入る文字列の一部の整数を作成したいと考えています。次に、すべてが配列に含まれていることを確認するために印刷したい... 2番目のforループは実際には必要ないことに気づきましたが、とにかくそこに置きました。

私の問題は、次のことをしようとするとエラーメッセージが表示されることです。

myArray[i][j] = "(" << i << "," << j << ")";

具体的には、次のように伝えます。

error: invalid operands of types 'const char*' and 'const char [2]' to binary 
       'operator+'

このエラーが理解できず、修正方法もわかりません...

これが私が持っているものです。

int height = 5;
int width = 5;
string myArray[height][width];

for (int i = 0; i < height; ++i) {
    for (int j = 0; j < width; ++j) {
        myArray[i][j] = "(" << i << "," << j << ")";
    }
}

for (int i = 0; i < height; ++i) {
    for (int j = 0; j < width; ++j) {
        cout << myArray[i][j] << "  ";
    }
}

エラーを修正する方法を知りたいだけで、エラーが発生した理由を具体的に知りたいです。ありがとう!

4

2 に答える 2

4

C++ で文字列を連結する方法ではないため、エラーが発生します。しかし、あなたは を使用しているように見えるので、メッセージは奇妙operator <<ですoperator +

とにかく、を使用してstd::stringstreamください。

std::stringstream ss;
ss << "(" << i << "," << j << ")";
myArray[i][j] = ss.str();
于 2012-09-15T05:34:50.113 に答える
3

stringbuilder次のように使用できるように、ユーティリティを作成できます。

myArray[i][j] = stringbuilder() << "(" << i << "," << j << ")";

//other examples
std::string s = stringbuilder() << 25  << " is greater than " << 5;

f(stringbuilder() << a << b << c); //f is : void f(std::string const&);

は次のようにstringbuilder定義されます。

struct stringbuilder
{
   std::stringstream ss;
   template<typename T>
   stringbuilder & operator << (const T &data)
   {
        ss << data;
        return *this;
   }
   operator std::string() { return ss.str(); }
};

コードで何度も使用する場合は、コードの冗長性が低下することに注意してください。それ以外の場合は、直接使用できます。std::stringstreamstringbuilderstd::stringstream

于 2012-09-15T05:37:20.873 に答える