2012-02-02 185 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 + ")"); 
    } 

編輯:

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

問題不明確。你需要解決什麼問題? – 2012-02-02 14:26:08

+1

誰是x和y? – 2012-02-02 14:26:21

回答

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; s <<「(」<< x <<「,」<< y <<「)」; return s.str();' 編譯正確。感謝您的答覆。 – 2012-02-02 14:47:03

+0

這不起作用,因爲'operator <<'返回對ostream的引用,而ostream沒有'str()'成員函數。 – 2012-02-02 14:48:47

+0

哎呀,我的錯。感謝修復,@EAGER_STUDENT。 – 2012-02-02 15:05:00

1

問題不在於x_stry_str是本地變量,而是分配不符合您的期望。那不是你把int轉換成string

您可以使用_itoa()int轉換爲char*stringstream,如在Michael的回答中所述。

+0

int正被轉換爲char的哪個operator =被定義。該字符串只包含單個字符。 – 2012-02-02 14:46:39

+0

@sftrabbit如果你有int 1,它不會被轉換成char''1''。 – 2012-02-02 14:58:27

+0

(這是迴應你之前刪除的評論:「那是標準嗎?」)是的,我相信如此。如果int的值不適合char,則結果將被實現定義。如果實現定義了要被簽名的char,那麼演員也將被實現定義。 – 2012-02-02 15:03:45