2012-10-28 56 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

相关问题