3

我不确定如何在这里实施解决方案。

编译时的错误是:-

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
4

2 回答 2

3

你放UserDirectory::错地方了。范围解析运算符 ( ::) 用于解析名称的范围。void并且string不需要解析,因为它们在外部范围内可见;只有类内的名称需要范围解析,因此它适用于这些名称:

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

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

当您说 时UserDirectory::void,您是在告诉编译器void您的类中有一个类型UserDirectory,但显然没有。

于 2012-10-28T00:12:02.807 回答
2

不需要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;
于 2012-10-28T00:11:56.027 回答