0

こんにちは、以下は私の機能です:

string Employee::get_print(void) {

   string out_string;
   stringstream ss;

   ss << e_id << " " << type << endl;
   out_string = ss.str();

   return out_string;
}

e_idでありtypeint従業員クラスの値が含まれています。しかし、それらを文字列ストリームに渡すと、文字列を出力しようとすると文字列がクリアされます。intしかし、ss << "Some text" << endl;この出力に a がない場合は問題ありません。私は何を間違っているのですか = S

//編集

Ok; これは呼び出しコードです:

tmp = cur->get_print();

tmp は文字列で、cur は従業員オブジェクトです。

このコード...

stringstream out; 
out << "Test " << e_id << " " << e_type; 
return out.str(); 

"Test" だけを返します。返された文字列を取り出す"Test " <<と ""

違いがあれば、Mac OS/X 10.6.2 で GCC 4.2 を使用しています。

4

5 に答える 5

1

Netbeansに移行しましたが、この問題は発生していません。したがって、これはXcodeの問題です。

于 2010-03-19T22:46:02.387 に答える
1

私もこのエラーを再現できません。前述のように、を含めないでください。endlこれは実際には a\nを追加し、書き込みバッファーをフラッシュすることになっているためです。この使用では、それは完全に不要であり、実際には望ましくない結果につながる可能性があります...ただし、編集/更新のコードは私にとっては問題なく機能します。

int main(int argc, char* argv[])
{
   int e_id = 5;
   int e_type = 123456;
   stringstream out; 
   out << "Test " << e_id << " " << e_type;
   cout << out.str();
   return 0;
}

プロデュース:

テスト 5 123456

私の提案は、それを再確認することでe_idありe_type、実際にはネイティブintです。

さらにテストするために、値のキャストを強制して、それが役立つかどうかを確認することができます。

out << "Test " << (int)e_id << " " << (int)e_type;

このエラーを再現できないため、これ以上お手伝いできません。でも頑張ってください!

于 2010-03-19T19:11:32.487 に答える
1

コードの他の部分でそれを使用しようとstringstreamしましたが、整数では機能しません。したがって、sprintfC 関数の使用に戻りました。

string Employee::get_print(void) {

   char out[50];

   sprintf(out, "%d %d", e_id, e_type);

   string output = out;

   return output;
} 

これは、必要な文字列を返します。

于 2010-03-19T21:19:22.167 に答える
0

endl は必要ないと思います。std::cout 上のファイルに改行を書きたい場合にのみ、endl を書く必要があります。

endl と書いているので、stringstream には 2 行目が空の文字列が含まれます。これはおそらくあなたを混乱させます。endl を削除して、1 行だけにします。

于 2010-03-19T16:15:40.273 に答える