使用布尔指针作为参数定义虚拟 void 会引发错误

Defining virtual void with a boolean pointer as an argument throws error

考虑两个 C++ classes:

class cTextbox : public cControl{
public:
    ...
protected:
    void onUpdate(bool* keys);
}

class cControl{
public:
    ...
protected:
    virtual void onUpdate(bool*) = 0;
}

这个 returns 我在 CPP 文件中定义它时出现错误 C2504: 'cControl': base class 未定义。有没有可能我不能将指针作为参数传递给虚函数?

这与您的虚函数或布尔参数无关。

在您定义 cTextBox 时,cControl 尚不存在,因此您不能将其用作基础。这就是错误消息显示基数 class 未定义的原因:cControl、基数 class 未定义。

先定义cControl.

始终在其子class 之前定义基class,因为编译器需要知道基class 的完整定义以便继承。因此,如果您在基数 class 之前定义子 class,C++ 会抛出一个错误,指出您的基数 class 未定义。

// base class first
class cControl{
public:
    ...
protected:
    virtual void onUpdate(bool*) = 0;
}

// subclass second
class cTextbox : public cControl{
public:
    ...
protected:
    void onUpdate(bool* keys);
}

还需要注意的是,C++中的构造顺序是:

  1. 基本成员函数。
  2. 基础构造器。
  3. Subclass 成员函数。
  4. 子class 构造函数。