2012-02-02 6 views
-2

x_str、y_strはローカルなので、この関数では正しい出力が得られません。 (不正な文字がx_strとy_strの代わりに表示されます) 私のクラスに2つ以上のメンバー変数x_str、y_strを追加したくありません。位置を印刷するには

したがって、正しい出力を得るためにこの関数を置き換えることができます。

string Pos::getPosReport(){ 
     string x_str; 
     x_str = x; 
     string y_str; 
     y_str = y; 
     return string("(" + x_str + "," + y_str + ")"); 
    } 

EDIT:

class Pos { 
    int x; 
    int y; 
public: 
    Pos(); 
    Pos(Pos const&); 
    Pos(int,int); 

    Pos&  operator=(Pos const&); 
    bool operator==(Pos const&); 
    bool operator!=(Pos const&); 

    void setPos(Pos const&); 
    void setPos(int,int); 

    void setx(int); 
    void sety(int); 

    int getx() const ; 
    int gety() const ; 

    string getPosReport(); 

    virtual ~Pos(); 
}; 
+1

質問は不明です。解決するあなたの実際の問題は何ですか? –

+1

xとyは誰ですか? –

答えて

5
std::stringstream ss; 
ss << "(" << x << "," << y << ")"; 
return ss; 

(これは全体の機能体です)。

+0

私のコンパイラは、 'std :: stringstream ss;return(ss << "(" << x << "、" << y << ")")。str(); '**エラー: 'struct std :: basic_ostream 'に 'str'という名前のメンバーはありません**しかし' stringstream s; << "(" << x << "、" << y << ")"; 返信s.str(); ' comipiles正しく。お返事をありがとうございます。 –

+0

'operator <<'はostreamへの参照を返し、ostreamは 'str()'というメンバ関数を持たないので、これは動作しません。 –

+0

おっと、私のせいです。 @ EAGER_STUDENTを修正していただきありがとうございます。 –

1

x_stry_strはローカル変数ですが、割り当てが期待通りのものではないという問題はありません。それはintstringに変換していません。

_itoa()を使用して、intchar*またはstringstreamにマイケルの答えのように変換できます。

+0

intがoperator =が定義されているcharにキャストされています。文字列には単一の文字のみが含まれます。 –

+0

@sftrabbitもしあなたがint 1を持っていれば、char 1にキャストされません。 –

+0

(これはあなたの以前のコメントに対応しています:「その標準ですか?」)はい、私はそう信じています。 intの値がcharに収まらない場合、結果は実装定義になります。インプリメンテーションがcharに署名することを定義している場合、キャストも実装定義になります。 –

関連する問題