我正在尝试在定义类之前创建类Object。这是一个例子。
worker
以下是错误列表:
class A;
class B;
class A{
public:
void fun(B obj){
}
};
class B{ };
int main(){
return 0;
}
任何解决方案?我已经搜索过它,但未能解决这个问题.. 在此先感谢。
答案 0 :(得分:3)
在完全声明A::fun()
之后,提供B
的定义:
#include <iostream>
class A;
class B;
class A {
public:
void fun(B obj);
};
class B{ };
void A::fun(B obj) {}
int main() {
return 0;
}
定义通常会进入.cpp文件,您可以在其中包含B.h
以完成声明。
答案 1 :(得分:1)
此时:
void fun(B obj) {
}
编译器需要知道 B
是什么。也就是说,它的大小,成员的类型,定义的构造函数等等。否则,它无法生成您要求的代码。
您可以通过以下方式解决此问题:
B
或A
A::fun
内联,并在定义B
后移动定义通过指针或引用传递B obj
- 因为指针和引用都是相同的大小,并且既没有调用你尚未声明的构造函数,这也有效,但是......你仍然不能执行 B
中fun
个实例的任何内容,直到B
被定义。
因此,当前代码将编译,但如果fun
除了指针算术之外还执行任何操作,它将再次中断。
答案 2 :(得分:0)
在此功能定义中,
void fun(B obj){
}
您告诉编译器您要将堆栈上的B
实例传递给fun
。因此,编译器需要知道B
的定义,以便它知道要分配多少堆栈空间。在代码中的这一点上,您只声明B
存在。您没有提供B
的定义,因此无法知道需要多少内存。
[编辑修复声明/定义错误陈述]