2014-03-25 48 views
0

所以,如果我有這樣的功能:通過引用傳遞串並通過在C函數參數++更新其值

void edit(string& s) { 
    //do something with s 
} 

,我使用它像:

std::string str = "Hello"; 
edit(str); 

這將更新的值str

但現在我有一個類,其中頭文件具有類似construtor:

class MyClass { 

    private: 
     //something 
    protected: 
     std::string& str; 
    public: 
     //something 

    MyClass(std::string& s): str(s){} 
}; 

,後來在源文件中,我計算,我想通過傳遞字符串參數更新字符串到構造函數,但它不起作用。

你可以請給我一些想法,我怎麼能做這樣的工作,以便我分配一個std::string價值的類變量反映在傳遞給此類的構造函數的參數字符串中。

謝謝

UPDATE:

隨着上述變化的建議(使STR參考),我得到這個錯誤:

「錯誤:STR必須在cosntructor初始化鹼/構件初始化列表」

更新 - SOLUTION:

嗨,所以下面這個方法,我似乎已經找到了解決辦法:

class MyClass { 

     private: 
      //something 
     protected: 
      std::string* str; 
     public: 
      //something 

     MyClass(std::string* s): str(s){} 
    }; 

後來,我有:

string mystring; 

MyClass(&mystring);和voilla它似乎工作堅持好。

+0

缺少&在你的成員變量str ...應該引用不可變... – PiotrNycz

+0

你傳遞給構造函數的字符串是不相關的。您的對象具有該字符串的*副本*。如果您無法訪問副本,則無法訪問。 –

回答

0
MyClass(std::string& s): str(s){} 

str(s)副本sstr內容。因爲str不是引用變量,所以它是一個副本,不影響傳遞的參數。使類成員成爲引用變量。但要注意傳遞參數的生命週期。

+0

謝謝但如果我嘗試聲明str引用,它不會編譯和我得到錯誤未初始化的引用變量? – snowden

+0

你使用什麼編譯器?它實際上[作品](http://ideone.com/6Qnuby)。 – Mahesh

+0

visual studio 2010,但不是引用成員必須馬上初始化?但沒關係,我快速複查 – snowden