【问题标题】:class* argument displayed as <error-type>*class* 参数显示为 <error-type>*
【发布时间】:2015-12-24 01:16:01
【问题描述】:

我有这门课:

#pragma once
#include <thread>
#include "Game.h"

class CPhysics {
    CGame *mGame;
    //[...]

public:
    CPhysics(CGame *game);

    //[...]
};

我将CGame 实例传递给CPhysics 的构造函数,如下所示:

#include "Game.h"

CGame::CGame() {
    //[...]
    mPhysics = new CPhysics(this);
}

但是编译器不知道该怎么做,给了我&lt;error-type&gt; *game 而不是CGame *game。我想传递一个指向 CGame 实例的指针。如果我删除星号会发送什么?我有点困惑。

编辑: 实际错误如下:它想使用CPhysics(CPhysics &amp;&amp;) 而不是CPhysics(CGame *game) 构造函数。但CGame *const 不能也不应转换为const CPhysics &amp;。我猜这是由于错误类型造成的。

【问题讨论】:

  • 编译时的实际错误是什么。我也怀疑你有一个循环依赖循环。
  • 此文本来自您的 IDE,而不是您的编译器
  • Game.h 是否包含Physics.h?我猜CGame [尚未] 声明。您可能想要使用前向声明(或打破循环依赖)。
  • “我通过了 CGame 实例” 不,不,你没有!
  • 我添加了一些关于实际错误的信息。 @DietmarKühl 是的,Game.h 包括 Physics.h,反之亦然。

标签: c++ class pointers


【解决方案1】:

当你使用mPhysics = new CPhysics(this); 您需要为CPhysics 定义一个不带任何参数的构造函数,并为Cpysics 重新定义一个新的分配构造函数。

【讨论】:

  • 如果构造函数没有参数,this怎么传?他用CGame 方法调用它,所以thisCGame*,而不是CPhysics*
猜你喜欢
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多