1. ホーム
  2. c++

[解決済み】不明なオーバーライド指定子、型指定子の欠落

2022-02-05 20:02:33

質問

最初に Parameter.h :

#pragma once
#include <string>

class Parameter {
public:
    Parameter();
    ~Parameter();

private:
    string constValue;
    string varName;
};

そして Parameter.cpp :

#include "Parameter.h"

using namespace std;

Parameter::Parameter() {};
Parameter::~Parameter() {};

この2つのファイルを必要最低限まで落とし込むと、エラーが出るようなんです。の2つのプライベート宣言のところで string の場合、2つのエラーが発生します。

'constValue': unknown override specifier
missing type specifier - int assumed. Note: C++ does not support default-int

このようなエラーのある質問をいくつか見かけましたが、いずれも循環参照や欠落参照に言及しています。私は、絶対に必要なものだけに絞り込んでいるので、循環参照や欠落している参照は見当たりません。

何か思い当たることはありますか?

解決方法は?

コメントで @Pete Becker が指摘しているように、名前を修飾する必要があります。 string として std::string :

private:
    std::string constValue;
    std::string varName;

コンパイラは何を言っているのかわからないだけで、ただ書いているに等しい。

SomeGreatType myMagicalUniversalType

コンパイラは、あなたが宣言しない限り、それがどのような型であるか分からないので、エラーになるのです。

型指定子がない - int と仮定

について読んでおくとよいでしょう。 を避けるべき理由 using namespace std; .

コメントでのご質問に関して。

今まで書いたクラスでは、std::を付けず、.cppファイルのusing namespace std;に頼ってきました。なぜ、このクラスは違うのでしょうか?

私が推測できるのは、"Parameter.h" を含む前のある時点で、あなたは using namespace std . 例::

// SomeType.h

#using namespace std

...

// Parameter.cpp
#include "SomeType.h"
#include "Parameter.h"

コンパイラは上から下へコンパイルしていくので を含めると、基本的に #include をそのファイルの内容に置き換えます。