Hai
我有一个A,B,C类,现在我在A类中有成员函数需要对象 B级,C级。是否有可能实现。如果是的话怎么样?
class A
{
public:
void fun(B obj_b,C obj_c)
{
}
}
class B
{
//some work
}
class C
{
//some work
}
int main()
{
B obj_b;
C obj_c;
A obj_a;
obj_a.fun(obj_b,obj_c); //I GET ERROR HERE DURING COMPILATION
}
上述代码有什么问题?。
ERROR:
注意:此处首先需要合成方法 错误:初始化'void A :: fun(B,C)'
的参数1谢谢
答案 0 :(得分:3)
如果它不是拼写错误:你的功能乐趣不正确,返回类型丢失。
void fun(B obj_b,C obj_c) // void was missing
{
}
正如其他人指出的那样,这个代码还有其他一些问题,因为缺少类型的返回类型,类定义缺少;
,类B和类C必须在类A之前声明...
最后一个似乎是你的错误所说的。
答案 1 :(得分:2)
可能是因为班级宣言..
在void fun(B obj_b,C obj_c)
,编译器不知道class B
和class C
。所以尝试给予像
class B
{
//some work
};
class C
{
//some work
};
class A
{
public:
void fun(B obj_b,C obj_c)
{
}
};
如果这些类位于不同的头文件中,#include
中的class A
..
希望有所帮助......
答案 2 :(得分:1)
void fun(B obj_b,C obj_c)
行中未知B类和C类,您必须先声明它们。
首先声明并定义它们,如果这是不可能的(例如因为它们也需要A),你可以使用前向声明。这只是两条单行
class B;
class C;
BTW:使用方法声明void fun(B obj_b,C obj_c)
传递每个值的参数,这意味着复制了对象B和C.大多数情况下,这不是您想要的:通过将方法签名更改为void fun(B& obj_b,C& obj_c)
来通过引用传递它们。
答案 3 :(得分:0)
更正所有语法错误后,您可能会遇到声明fun
成员函数的行的错误,说明尚未声明类B
和C
。在B
类声明之前为类C
和A
放置一个前向声明。就是这样:
class B;
class C;
class A
{
public:
void fun(B obj_b, C obj_c)
... other stuff here
};
class B
{
... real declaration of the class B
};
class C
{
... real declaration of the class C
};
顺便说一下,前向声明是循环引用的类声明的唯一方法。