【发布时间】:2022-01-09 23:28:02
【问题描述】:
我试图在 Entity 类之外调用一个将实体指针作为参数的方法,我得到了这个编译器错误:
C3861:“PrintEntity”:找不到标识符
我的代码如下所示:
#include <iostream>
class Entity {
public:
int x, y;
Entity() {
this->x = 0;
this->y = 0;
}
Entity(int x, int y) {
this->x = x;
this->y = y;
PrintEntity(this);
}
int GetX() const {
const Entity* e = this;
}
};
void PrintEntity(Entity* e) {
std::cout << e->x << ", " << e->y << std::endl;
}
int main() {
Entity e(5, 5);
}
(这不是实用代码,更多的是概念验证练习)
我知道发生此错误是因为我没有为 PrintEntity 定义原型,因此当在 Entity 构造函数中调用时,Entity 类无法识别 PrintEntity() 函数,但是当我在之前定义原型时Entity 类声明如下:
void PrintEntity(Entity* e);
class Entity {
...
}
我收到这 5 个错误:
C2182: 'PrintEntity': illegal use of type 'void'
C2065: 'Entity': undeclared identifier
C2065: 'e': undeclared identifier
C2064: term does not evaluate to a function taking 1 arguments
C2365: 'PrintEntity': redefinition; previous definition was 'data variable'
我对为什么会发生这些错误的理解是 PrintEntity() 原型无法识别 Entity 类,因为它尚未定义。
因此,如果由于尚未定义实体而无法在类定义之前编写原型,并且在没有原型化的情况下无法调用 PrintEntity() 方法,那么如何使这段代码工作同时仍然能够调用 PrintEntity()在 Entity 类内部?
【问题讨论】:
-
您在
PrintEntity的第一个声明之前也向前声明Entity类:class Entity; -
之前有人告诉过你不要发布文本截图。
-
@user17732522 解决这个问题的另一种方法是将类的实现分离到一个
.cpp文件中。
标签: c++