2014-10-10 71 views
0

我正在寫一段代碼,應該運行在多個平臺上。我在使用Visual Studio 2013進行編譯時沒有任何問題就可以使用代碼,但現在我嘗試爲Android編譯它,但是在標題中提到了錯誤。錯誤:沒有匹配函數調用呼叫 - 與VS2013編譯雖然

我試圖編譯代碼是這樣的:

#pragma once 

#include <string> 

class StringUtils 
{ 
public: 
    static std::string readFile(const std::string& filename); 
    static std::string& trimStart(std::string& s); 
    static std::string& trimEnd(std::string& s); 
    static std::string& trim(std::string& s); 
}; 

上述方法在錯誤中提到。舉個例子,我嘗試調用trim()方法是這樣的:

std::string TRData::readValue(std::ifstream& ifs) 
{ 
    std::string line; 
    std::getline(ifs, line); 
    int colon = line.find_first_of(':'); 
    assert(colon != std::string::npos); 
    return StringUtils::trim(line.substr(colon + 1)); 
} 

錯誤信息指向該方法的最後一行。我該如何解決這個問題?正如我所說的,它使用VS2013進行編譯,但不適用於使用默認NDK工具鏈的Android。

編輯:忘了粘貼確切的錯誤信息,那就是:

error : no matching function for call to 'StringUtils::trim(std::basic_string<char>)' 

回答

0

你需要你的函數簽名改爲

static std::string& trim(const std::string& s); 
         // ^^^^^ 

通過右值(如臨時返回從substr())到您的功能。

而且剛好路過值通過不會以這種方式工作了

static std::string trim(const std::string& s); 
       //^remove the reference 

我會建議爲你類似的其他功能做到這一點。


或者使用一個左打電話給你的功能

std::string part = line.substr(colon + 1); 
return StringUtils::trim(part); 
相關問題