2015-07-19 160 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文件的警卫,我不确定他们为什么在您的源文件中。

相关问题