使用布尔指针作为参数定义虚拟 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++中的构造顺序是:
- 基本成员函数。
- 基础构造器。
- Subclass 成员函数。
- 子class 构造函数。
考虑两个 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++中的构造顺序是:
- 基本成员函数。
- 基础构造器。
- Subclass 成员函数。
- 子class 构造函数。