想要将对象作为参数传递给成员函数c ++

时间:2010-08-17 10:20:42

标签: c++

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

谢谢

4 个答案:

答案 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 Bclass 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成员函数的行的错误,说明尚未声明类BC。在B类声明之前为类CA放置一个前向声明。就是这样:

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
};

顺便说一下,前向声明是循环引用的类声明的唯一方法。