我遇到了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类没有完全定义。
我该如何解决这个问题?
答案 0 :(得分:4)
在声明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文件中。
答案 1 :(得分:1)
我建议在类声明之外移动方法的实现,如下所示:
class A;
class B {
public:
void Method1(A* instanceOfA);
...
};
class A {
public:
void Method1(B* instanceOfB);
void MethodX();
...
};
void B::Method1(A* instanceOfA) {
...
}
答案 2 :(得分:0)
以相反的方式定义和声明类?
class B;
class A
{
Method1(B* instaceOfB);
MethodX();
};
class B
{
void Method1(A* instaceOfA)
{
instaceOfA->MethodX();
}
};
当然,如果A::Method1
函数也是内联函数,则不起作用。
答案 3 :(得分:0)
你的impl代码是否在头文件中?如果是这样,请尝试将其移至cpp文件并#include A和B
答案 4 :(得分:0)
您是否有理由需要实施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();
.......
}