2012-08-12 109 views
0

我有這樣的功能:find()方法

int find_string (string *url){ 
    if(*url.find() != string::npos){ 
     [...] 
    } 
    [...] 
} 

,並調用它是這樣的:

find_string(&url); 

,但我得到了以下編譯錯誤:

request for member ‘find’ in ‘url’, which is of non-class type ‘std::string*’ 

爲什麼會發生這種情況,最重要的是,我該如何解決這個問題? (如果沒有指針,這是工作)

+1

這稱爲運算符優先級,請參閱http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence。 '*'的優先級低於'.'。 – Zeta 2012-08-12 17:02:53

回答

3

*url.find()相當於*(url.find())當你真正想要的是(*url).find() 。更好的是,你應該使用url->find()來代替。

這樣做的原因是反引用(*)運算符具有比所述元件選擇(.)運算下precedence

3

使用(*url).find(),或者更好的url->find()

*url.find嘗試調用find()函數,然後使用operator *