c++中的前向声明类
forward declared class in C++
我对c++有一个问题。
我想创建两个类,A和b。
类A有一些方法接受的参数是类B的一个实例。但在类B中,我也有一些方法接受的参数是类A的一个实例。
我尝试前向声明类A,然后定义类b。最后,我定义了类A。
一些代码:class A;
class B
{
void Method1(A* instaceOfA)
{
instaceOfA->MethodX();
}
.......
};
class A
{
Method1(B* instaceOfB);
MethodX();
.......
};
我在Visual Studio 2010中编写代码,它显示了一个错误,因为我在类A中调用MethodX
,但类A没有完全定义。
我该如何解决这个问题?
将B::Method1
的定义放在class A
声明之后
//header file
class A;
class B
{
void Method1(A* instaceOfA);
.......
};
class A
{
Method1(B* instaceOfB);
MethodX();
.......
};
// cpp file
void B::Method1(A* instaceOfA);
{
instaceOfA->MethodX();
}
这就是.cpp文件的目的。在头文件中声明类和方法,然后将定义添加到.cpp文件中。
我建议把方法的实现移到类声明之外,像这样:
class A;
class B {
public:
void Method1(A* instanceOfA);
...
};
class A {
public:
void Method1(B* instanceOfB);
void MethodX();
...
};
void B::Method1(A* instanceOfA) {
...
}
以相反的方式定义和声明类?
class B;
class A
{
Method1(B* instaceOfB);
MethodX();
};
class B
{
void Method1(A* instaceOfA)
{
instaceOfA->MethodX();
}
};
当然,如果A::Method1
函数也是内联的,这就不起作用了。
您的impl代码在头文件中吗?如果是的话,试着把它移到一个cpp文件中,#include a和B
是否有需要实现内联类B的原因?如果将类定义与实现分开(理想情况下将它们放在。h和。cpp文件中),这个问题就会解决。
//blah.h
class A;
class B
{
void Method1(A* instaceOfA);
.......
};
class A
{
Method1(B* instaceOfB);
MethodX();
.......
}l
//blah.cpp
#include "blah.h"
class B
{
void Method1(A* instaceOfA)
{
instaceOfA->MethodX();
}
.......
};
class A
{
Method1(B* instaceOfB)#
{
instaceOfB->Method1();
}
MethodX();
.......
}
相关文章:
- .cpp和.h文件中的模板专用化声明
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 为什么在定义函数之前先声明它
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- #ifdef和未声明的标识符
- 没有显式声明的int[]中的foreach
- 在基于范围的for循环中使用结构化绑定声明
- 在将变量声明为引用时,堆在释放后使用
- C++:无法访问声明的受保护成员
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 在函数内部的声明中初始化数组,并在外部使用它
- Visual Studio中的函数声明和函数定义问题
- c++类声明时,相同的例程,不同的成员变量类型
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别