未知的覆盖说明符,缺少类型说明符

时间:2016-02-01 23:51:30

标签: c++

首先,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() {};

我把这两个文件带到了最近的骨头,以获得似乎突然出现的错误。在string的两个私人声明中,我得到了两个错误:

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

我已经看到了这些错误的几个问题,但每个都引用了循环或缺失的引用。当我把它剥离到绝对需要的时候,我看不到任何循环引用或缺少的引用。

有什么想法吗?

1 个答案:

答案 0 :(得分:13)

正如@Pete Becker在评论中指出的那样,您需要将名称string限定为std::string

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

编译器只是不知道你在说什么,它只相当于写作:

SomeGreatType myMagicalUniversalType

除非你声明了,否则编译器只知道它是什么类型,因此错误

  

缺少类型说明符 - 假定为int

您应该阅读why you should avoid using namespace std;

关于你在评论中提出的问题:

  

在我编写的所有(工作)类中,我从未放入std ::而是依赖于using namespace std;在.cpp文件中。为什么这个会有所不同?

我只能在包含“Parameter.h”之前的某个时刻推断出你有一个using namespace std。 E.g:

// SomeType.h

#using namespace std

...

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

编译器从上到下编译事物,including essentially just replaces the #include with the contents of that file