2016-05-23 46 views
-1

我試圖編譯下面的代碼C++ SUBSTR方法 - 「無效使用的‘這個’非成員函數」

std::string key = "DISTRIB_DESCRIPTION="; 
std::cout << "last five characters: " << key.substr(this.end()-5) << '\n'; 

,編譯器說

error: invalid use of ‘this’ in non-member function 
std::cout << "last five characters: " << key.substr(this.end()-5) << '\n'; 
               ^

substr是一個「公開成員函數「爲std::string,爲什麼我不能使用this

我知道我可能只是再次引用key代替this,但我的原代碼

std::cout << "Description: " << line.substr(found+key.length()+1).substr(this.begin(),this.length()-1) << '\n'; 

在第二次使用的substr,字符串沒有一個名字,以便引用的唯一途徑這將是this。我固定它

std::cout << "Description: " << line.substr(found+key.length()+1,line.length()-found-key.length()-2) << '\n'; 

但我現在好奇this不起作用。

+3

你真的需要閱讀一本關於C++的書。 – SergeyA

+1

我投票結束這個問題作爲題外話,因爲OP需要一本書,而不是一個SO問題。 – SergeyA

+3

我不認爲我們應該踢出初學者。 OP在理解他需要去的地方迷路了。我認爲SO的存在正是爲了讓這樣的答案有一席之地。問題根據SO的指導方針提出,可以通過未來的問題提出。我投票我們保持開放。 –

回答

4

this僅當您將代碼編寫爲類的非靜態方法的一部分時纔可用。在你的具體情況下,你應該明白this應該參考key,但編譯器認爲沒有理由這樣做。

此外,string.substr()需要一個整數來指示開始位置。 string.end()返回一個迭代器,它不起作用。你可能想要做的是調用string.length()。

只需使用替換第一段代碼:

std::cout << "last five characters: " << key.substr(key.length()-5) << '\n'; 

而且你應該沒問題。

相關問題