2013-03-04 105 views
3

當我編譯下面的文件,我已經得到了錯誤:C++錯誤:「串」沒有指定類型

ECArgs.h:36:3: error: ‘string’ does not name a type 

ECArgs.h:36:ECString值(字符C);

有人能給我任何錯誤提示嗎?

ECArgs.h

#include <list> 
#include "ECString.h" 

class ECArgs 
{ 
public: 
    ECArgs(int argc, char *argv[]); 
    int nargs() { return nargs_; } 
    bool isset(char c); 
    ECString value(char c); 
    ECString arg(int n) { return argList[n]; } 
private: 
    int nargs_; 
    int nopts_; 
    ECString argList[32]; 
    list<ECString> optList; 
}; 

ECString.h

#define ECS gnu 

#if ECS == gnu 
#include <cstring> 
#define ECString string 
using namespace std; 
#else 
#include <bstring.h> 
#define ECString string 
#endif 
+0

這不是「有線」錯誤。不從非包含的頭中識別符號是完全合理的。此外,'typedef'和'using'是比'#define'更好的類型別名解決方案。 – chris 2013-03-04 04:08:47

+0

@chris你的意思是不包含頭文件? – 2013-03-04 04:11:11

+0

如果你想訪問'std :: string',你需要'#include ',而不是'#include '。 – jogojapan 2013-03-04 04:13:05

回答

2

您需要添加:

#include <string> 

cstring包括功能來操縱C風格的字符串。此版本的作品:

#include <list> 
#include <string> 

#if ECS == gnu 
#include <cstring> 
#define ECString string 
using namespace std; 
#else 
#include <bstring.h> 
#define ECString string 
#endif 

class ECArgs 
{ 
public: 
    ECArgs(int argc, char *argv[]); 
    int nargs() { return nargs_; } 
    bool isset(char c); 
    ECString value(char c); 
    ECString arg(int n) { return argList[n]; } 
private: 
    int nargs_; 
    int nopts_; 
    ECString argList[32]; 
    list<ECString> optList; 
}; 

int main() 
{ 

} 
+0

只是想知道爲什麼cstring不起作用。我試圖在另一個test.cpp文件中使用'string',其中包含。 test.cpp運行良好。 – 2013-03-04 04:14:44

+0

@EarthWorm你可能包含另一個包含字符串的頭文件嗎?我正在看gcc 4.4.4和幾個頭包括字符串,包括隨機和stdexcept。 – 2013-03-04 04:23:24

+0

你說得對。我包括。非常感謝 – 2013-03-04 04:33:54

4

我遇到了類似的錯誤。這是因爲我遺漏了using namespace std;

+0

是的,我想只是輸入'#include '是不夠的,需要使用命名空間標準; – 2017-07-15 11:48:30