2014-12-25 216 views
-2

我是C++新手。當我編譯此代碼編譯器會報告錯誤 -編譯錯誤C++

main.cpp-

#include <iostream> 
#include <string> 
#include "main.h" 

using namespace std; 

string strings::getstr(string str) 
{ 
    return str; 
} 

int main() 
{ 
    strings strstr; 
    string constr; 
    string msg; 

    msg = "Hello World!"; 
    constr = strstr.getstr(msg); 
    cout << constr; 
    return 0; 
} 

main.h-

#ifndef MAIN_H_INCLUDED 
#define MAIN_H_INCLUDED 

#include <string> 

class strings 
{ 
public: 
    string getstr (string str); 
}; 

#endif // MAIN_H_INCLUDED 

無差錯

error: 'string' does not name a type 
error: no 'std::string strings::getstr(std::string)' member function declared in class 'strings' 
error: In function 'int main()': 
error: 'class strings' has no member named 'getstr' 

我使用的代碼::塊和gcc 我已經寫了這個簡單的代碼,因爲我正在一個項目上工作,當我想編譯I al如何讓

'串' 沒有指定類型

遺憾的英語不好...

+3

使用的std :: string,而不是字符串。和std :: cout而不是cout。 – drescherjm

+0

檢查[這個問題](http://stackoverflow.com/questions/2133250/does-not-name-a-type-error-in-c) – MTahir

+0

我會提出一個答案,但這絕對必須是重複。 – drescherjm

回答

-2

使用using namespace std;頁眉後main.h

-1

這可能解決問題

#ifndef MAIN_H_INCLUDED 
#define MAIN_H_INCLUDED 

#include <string> 

class strings 
{ 
public: 
    std::string getstr(std::string str); 
}; 

#endif // MAIN_H_INCLUDED 
0

的正確名稱string類是'std :: string',因爲它是在'std'命名空間內聲明的('cout'也是如此)。在將'string'改爲'std :: string'並使用'std :: cout'而不是'cout'後,你的程序會正確編譯。

另一種方式來做到這一點,是把「性病」作爲將第一名稱空間:

#include <string> 
using namespace std; 

就個人而言,我不喜歡用「使用命名空間......」(這是我很難跟蹤不同的命名空間)。

+1

'使用名稱空間std'不會使'std'成爲「默認」名稱空間(該概念在語言中不存在)。在頭文件中這樣做也是一個糟糕的主意。 – juanchopanza