如何在 C++ 中使用 Class 原型
How to use Class Prototype in C++
我试图在定义 class 之前创建 class 对象。这是例子。
class A;
class B;
class A{
public:
void fun(B obj){
}
};
class B{ };
int main(){
return 0;
}
这是错误列表:
In member function 'void A::fun(B)':
6 13 [Error] 'obj' has incomplete type
2 7 [Error] forward declaration of 'class B'
有什么解决办法吗?我已经搜索过了,但没能解决这个问题..
提前致谢。
在 B
完全声明后,提供 A::fun()
的外联定义:
#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
以获得完整的声明。
此外,please don't using namespace std;
。
此时:
void fun(B obj) {
}
编译器需要知道什么是 B
。也就是说,它有多大,它的成员有什么类型,定义了什么构造函数等等。否则,它不能生成你要求它生成的代码。
您可以通过以下方式解决此问题:
- 定义(未声明)
B
之前 A
,或
- 仅declare
A::fun
内联,并且在B
也已经定义 之后移动定义
通过指针或引用传递 B obj
- 因为指针和引用都具有相同的大小,并且都不会调用您尚未声明的构造函数,这有效,但是......你在定义 B
之前,fun
中的 B
实例仍然无法 执行 任何操作。
因此,当前代码可以编译,但如果 fun
做的不仅仅是指针运算,它会再次中断。
在这个函数定义中,
void fun(B obj){
}
您是在告诉编译器您要将堆栈上的 B
实例传递给 fun
。因此,编译器需要知道 B
的定义,以便它知道要分配多少堆栈 space。此时在代码中,您只声明了 B
存在。你还没有给它提供 B
的定义,所以它不知道需要多少内存。
[编辑以修复 declaration/definition 错误陈述]
我试图在定义 class 之前创建 class 对象。这是例子。
class A;
class B;
class A{
public:
void fun(B obj){
}
};
class B{ };
int main(){
return 0;
}
这是错误列表:
In member function 'void A::fun(B)':
6 13 [Error] 'obj' has incomplete type
2 7 [Error] forward declaration of 'class B'
有什么解决办法吗?我已经搜索过了,但没能解决这个问题.. 提前致谢。
在 B
完全声明后,提供 A::fun()
的外联定义:
#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
以获得完整的声明。
此外,please don't using namespace std;
。
此时:
void fun(B obj) {
}
编译器需要知道什么是 B
。也就是说,它有多大,它的成员有什么类型,定义了什么构造函数等等。否则,它不能生成你要求它生成的代码。
您可以通过以下方式解决此问题:
- 定义(未声明)
B
之前A
,或 - 仅declare
A::fun
内联,并且在B
也已经定义 之后移动定义
通过指针或引用传递
B obj
- 因为指针和引用都具有相同的大小,并且都不会调用您尚未声明的构造函数,这有效,但是......你在定义B
之前,fun
中的B
实例仍然无法 执行 任何操作。因此,当前代码可以编译,但如果
fun
做的不仅仅是指针运算,它会再次中断。
在这个函数定义中,
void fun(B obj){
}
您是在告诉编译器您要将堆栈上的 B
实例传递给 fun
。因此,编译器需要知道 B
的定义,以便它知道要分配多少堆栈 space。此时在代码中,您只声明了 B
存在。你还没有给它提供 B
的定义,所以它不知道需要多少内存。
[编辑以修复 declaration/definition 错误陈述]