<分区>
我添加了一个 C++ 类来帮助我运行模拟。它工作正常,直到我添加了另一个具有不同初始化参数的构造函数,之后编译器提示之前工作的原始构造函数出现“不完整类型”错误。 CLion 还提示它找不到匹配的构造函数,即使它是我一直使用到现在的同一个构造函数。
附言。我正在创建该类的 2 个单独实例(1 个在 main 中,1 个在另一个类中也在 main 中初始化)...不确定这是否可能是个问题?
代码如下:
模拟环境.hpp
#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
模拟环境.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)
{}
ClassContainingSomeParams.hpp
#ifndef CLASSCONTAININGSOMEPARAMS
#define CLASSCONTAININGSOMEPARAMS
#include "SimEnv.hpp"
ClassContainingSomeParams
{
public:
ClassContainingSomeParams();
void runSim();
int getP1();
int getP2();
private:
int p1, p2;
};
#endif
ClassContainingSomeParams.cpp
#include "ClassContainingSomeParams.hpp"
ClassContainingSomeParams::ClassContainingSomeParams() : p1(0), p2(0)
{}
void ClassContainingSomeParams::runSim()
{
SimEnv env(p1, p2);
// Do some stuff
}
main.cpp
#include "ClassContainingSomeParams.hpp"
#include "SimEnv.hpp"
int main()
{
ClassContainingSomeParams p;
SimEnv env(p);
// Do some stuff
return 0;
}
我得到的确切错误是
SimEnv.hpp:10:33: 错误:字段“ClassContainingParams”的类型“SimEnv”不完整
ClassContainingSomeParams.hpp:5:1: 错误:'ClassContainingSomeParams' 没有命名类型
是否需要将类声明和初始化放在头文件中?如果是,为什么?