2016-04-14 51 views
-1

我是C++新手。我最近正在製作一個使用單獨文件中的類的小程序。我也想使用setter和getter(設置& get)函數爲變量賦值。編譯器給我一個奇怪的錯誤,當我運行該程序。它說'字符串'不會命名一個類型。下面是代碼:'字符串'不會命名一個類型 - C++錯誤

MyClass.h

#ifndef MYCLASS_H // #ifndef means if not defined 
#define MYCLASS_H // then define it 
#include <string> 

class MyClass 
{ 

public: 

    // this is the constructor function prototype 
    MyClass(); 

    void setModuleName(string &); 
    string getModuleName(); 


private: 
    string moduleName; 

}; 

#endif 

MyClass.cpp文件

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

using namespace std; 

MyClass::MyClass() 
{ 
    cout << "This line will print automatically because it is a constructor." << endl; 
} 

void MyClass::setModuleName(string &name) { 
moduleName= name; 
} 

string MyClass::getModuleName() { 
return moduleName; 
} 

的main.cpp文件

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

using namespace std; 

int main() 
{ 
    MyClass obj; // obj is the object of the class MyClass 

    obj.setModuleName("Module Name is C++"); 
    cout << obj.getModuleName(); 
    return 0; 
} 
+0

'std :: string moduleName;' – SergeyA

+0

我沒有得到它。我應該修改哪個文件?你可以一步一步解釋。 –

+0

我和很多其他人強烈建議不要試圖通過在標題中添加'using namespace std ;'來解決此問題。它並不總是會導致痛苦,但它會導致比您想要忍受的更多的悲傷。更多在這裏:http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-in-c-considered-bad-practice – user4581301

回答

5

你必須明確地使用std::命名空間範圍在你的頭文件中:

class MyClass {  
public: 

    // this is the constructor function prototype 
    MyClass(); 

    void setModuleName(std::string &); // << Should be a const reference parameter 
        // ^^^^^ 
    std::string getModuleName(); 
// ^^^^^  

private: 
    std::string moduleName; 
// ^^^^^  
}; 

在你.cpp文件你有

using namespace std; 

這是非常好的,但最好要

using std::string; 

,甚至更好,但也使用std::範圍明確像標題。

+0

更好的是,在.cpp中根本沒有「使用」。 'std :: string'就好了。 – SergeyA

+0

@SergeyA如果它明確無誤,就像上面提到的那樣_grossly OK_。 –

+0

在這種情況下,「嚴重」意味着什麼? *總體*? – SergeyA