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タイプがあることをコンパイラに伝えていますが、明らかにそうではありません。voidUserDirectory

于 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 に答える