1. ホーム
  2. c++

[解決済み] string'は型名ではない - c++エラー [閉店].

2022-02-10 20:24:35

質問

私はC++の初心者です。最近、別ファイルのクラスを使用する小さなプログラムを作っていました。また、変数に値を割り当てるためにセッターとゲッター(set & get)関数を使用したいと思います。プログラムを実行すると、コンパイラが変なエラーを出します。「string」は型名ではないと言うのです。以下はそのコードです。

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;
}

解決方法は?

を使用する必要があります。 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:: スコープをヘッダーのように明示的に指定します。