首先,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
我已经看到了这些错误的几个问题,但每个都引用了循环或缺失的引用。当我把它剥离到绝对需要的时候,我看不到任何循环引用或缺少的引用。
有什么想法吗?
答案 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