2015-07-19 161 views
-4

請注意,我確實添加了一個頭文件strutils.h,我也在項目中複製了這個文件。 strutils.cpp被添加到源文件並被複制到Project文件夾中。錯誤C2039 - 不是std :: basic_string的成員

**收到錯誤如下:錯誤C2039: 'ToLower將':不是的成員 '的std :: basic_string的< _Elem,_Traits,_Alloc>' **

我開始的代碼繼Astrachan的計算機科學掛毯之後,我確實多次查過這本書,但沒有結果。 (庫函數確實包括ToLower()函數)

我覺得我錯過了一些非常簡單的東西。

以下是我的代碼。

#ifndef _STRUTILS_H 
    #define _STRUTILS_H 

    #include <iostream> 
    #include <string> 
    #include "strutils.h" 
    using namespace std; 

    int main() 
    { 
     string boot = "Drimmnal"; 
     boot.ToLower(); 

     cin.ignore(); 
     cin.get(); 
     return 0; 
    } 

    #endif 
+1

請從[良好的書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)系統地學習C++,或者像這樣的代碼不好會讓你困擾和你的同事。 –

+1

該消息表示'ToLower'不是'std :: string'的成員,其中'boot'是一個實例。閱讀[一個很好的參考](http://en.cppreference.com/w/cpp/string/basic_string)。 – juanchopanza

+2

@GunCode:再次讀你的書,該函數的簽名是'void ToLower(string & s);'。它不是'std :: string'成員函數,它不需要兩個數字參數。 – Blastfurnace

回答

2

您要使用的功能是標準庫std::string類的成員函數,所以你不能說boot.ToLower()調用它。該語法是爲成員函數保留的。

此功能在您書中的支持材料中提供。它有一個void ToLower(string & s);的簽名。這是一個免費的功能,它需要一個std::string引用和,我假設,更改字符串就地。您需要將其稱爲任何其他免費函數,並將其傳遞給std::string變量。

變化:

boot.ToLower(); 

要:

ToLower(boot); 

此外,你想從你的源代碼刪除下列行:

#ifndef _STRUTILS_H 
#define _STRUTILS_H 

#endif 

這些行包含來自strutils.h文件的警衛,我不確定他們爲什麼在您的源文件中。

相關問題