我添加了一个C++类来帮助我正在运行的模拟。它工作得很好,直到我添加了另一个具有不同初始化参数的构造函数,之后编译器抱怨之前工作的原始构造函数出现了“不完整类型”错误。clion还抱怨它找不到匹配的构造函数,尽管它和我一直使用的构造函数是一样的。
我正在创建两个独立的类实例(一个在main中,另一个在main中也初始化了一个类)…不确定这是否是一个问题?
代码如下:
西门子水电站
#ifndef SIMENV
#define SIMENV
#include "ClassContainingSomeParams.hpp"
class SimEnv
{
private:
int p1, p2;
public:
SimEnv(ClassContainingParams); // This is the bad constructor
SimEnv(int, int);
};
#endif
simenv.cpp公司
#include "SimEnv.hpp"
/* This is the bad constructor */
SimEnv::SimEnv(ClassContainingSomeParams p) :
p1(p.getP1()), p2(p.getP2())
{}
SimEnv(SimEnv(int p1, int p2) : p1(p1), p2(p2)
{}
类包含omeparams.hpp
#ifndef CLASSCONTAININGSOMEPARAMS
#define CLASSCONTAININGSOMEPARAMS
#include "SimEnv.hpp"
ClassContainingSomeParams
{
public:
ClassContainingSomeParams();
void runSim();
int getP1();
int getP2();
private:
int p1, p2;
};
#endif
包含omeparams.cpp的类
#include "ClassContainingSomeParams.hpp"
ClassContainingSomeParams::ClassContainingSomeParams() : p1(0), p2(0)
{}
void ClassContainingSomeParams::runSim()
{
SimEnv env(p1, p2);
// Do some stuff
}
主.cpp
#include "ClassContainingSomeParams.hpp"
#include "SimEnv.hpp"
int main()
{
ClassContainingSomeParams p;
SimEnv env(p);
// Do some stuff
return 0;
}
我得到的确切错误是
SimEnv.hpp:10:33: error: field 'ClassContainingParams' has incomplete type 'SimEnv'
ClassContainingSomeParams.hpp:5:1: error: 'ClassContainingSomeParams' does not name a type
我需要将类声明和初始化放入头文件吗?如果是,为什么?