2016-05-01 91 views
2

我有一個字符串指針string* ifxPtr;,我想要做的就是將此指針設置爲指向用戶輸入,然後遍歷每個字符。將先前分配的指針值傳遞給循環

string* ifxPtr; 

void Expression::GetInfix(string data) // This method runs first and it's setting the pointer to point to previously passed user input 
{ 
    ifxPtr = &data; 
    ConvertToPostfix(); 
} 

void Expression::ConvertToPostfix() 
{ 
    for (int i = 0; i < *ifxPtr->length; i++) // Here's the struggle, compiler is complaining about *ifxPtr with message Cannot apply binary '<' to 'int' and 'unassigned() const' 
    { 
     //Do something here 
    } 
} 

回答

3
  1. length是一個函數,它應該是length()
  2. 您 並不需要,如果你使用->
  3. 結果 從length()回到尊重指針size_t

這裏是我會用的:

int length = static_cast<int>((*ifxPtr).length()); 
+0

我甚至沒有發現'1',好的一個。 –

+0

這樣一個愚蠢的錯誤,但那是問題。 –

1

foo->(*foo).的簡寫。不要加倍運營商,也應該是length()

for (int i = 0; i < ifxPtr->length(); i++) 

同時,應注意與設計,運行到未定義行爲有一個簡單的錯誤的可能性是很大的。

+0

它仍然抱怨同樣的消息。 –

+0

@NaughtyNinja我假設你正在使用'std :: string'?你確定它是包含的嗎?你確定它不僅僅是一個關於比較unsigned和signed int的警告嗎? –

+0

是的,我使用std :: string,不,它不是一個警告它是一個錯誤,所以它不會編譯 - 不能將二進制'<'應用於'int'和'unassigned()const'。 –

0

如果您使用和*之前,它意味着使用指針指向的值。

string s,* p; p =&s;

這裏* p.lenght()與s.length相同如果你想通過指針訪問你必須像這樣使用p-> length()。