2012-10-28 45 views
2

我不知道如何在這裏實現解決方案。」預期在'void'之前的非限定id'「&」班級中的字符串沒有指定類型「錯誤

在編譯的錯誤是: -

error: expected unqualified-id before 'void' 

error: 'string' in class 'UserDirectory' does not name a type 

error: 'string' in class 'UserDirectory' does not name a type 

===========

**UserDirectory.cpp** 

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

UserDirectory::UserDirectory(){ 
cout << "UserDirectory Constructor created\n\n"; 
} 
UserDirectory::void setName(string x){ 
    name = x; 
} 
UserDirectory::string getName(){ 
    return name_; 
} 
UserDirectory::string name; 

===========

**UserDirectory.h** 

#ifndef USERDIRECTORY_H 
#define USERDIRECTORY_H 
#include <iostream> 
#include <string> 

class UserDirectory 
{ 
    public: 
    UserDirectory(); 
    void setName(std::string x); 
    std::string getName(); 
    private: 
    std::string name_; 
}; 

#endif // USERDIRECTORY_H 

========

**main.cpp** 

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


int main(){ 

    UserDirectory user1; 
string inputName; 

cout << "Enter your name: "; 
cin >> inputName; 
user1.setName(inputName); 
cout << "\nYou entered " << user1.getName(); 

    return 0; 
} // end main 

回答

1

你並不需要單獨定義name,你需要周圍的命名空間和類型的切換,就像這樣:

void UserDirectory::setName(string x){ 
    name = x; 
} 
string UserDirectory::getName(){ 
    return name_; 
} 

// This would be necessary if "name" were static; 
// Since it is not, remove this line: 
string UserDirectory::name; 
+0

感謝您的回答dasblinkenlight - 範圍是我知道的菜鳥錯誤!我一定不會再這樣做。 我會閱讀我的靜態/動態變量。 – Vault13

2

你把UserDirectory::在錯誤的地方。範圍解析運算符(::)用於解析名稱範圍。 voidstring不需要分辨率,因爲它們在該外部範圍內可見;只有裏面的類名需要作用域的分辨率,所以它適用於那些名字:您UserDirectory類,內

void UserDirectory::setName(string x){ 
    ... 
} 

string UserDirectory::getName(){ 
    ... 
} 

當你說UserDirectory::void,你告訴編譯器有一個類型void其中有明顯不是。

+0

謝謝你的回答克里斯,它肯定有助於清理我腦海中的範圍規則,現在看起來很明顯。 – Vault13

相關問題