(C ++)当两个类使用彼此的对象时,在类中使用其他类'对象作为参数

时间:2013-06-16 03:48:26

标签: c++ class parameter-passing

我的头衔听起来有点奇怪...... 但我的问题是......

class A{
public:
    doSomething(B & b);
}

class B{
public:
    doSomething(A & a);
}

这不应该起作用吗?

我收到错误,说函数不带1个参数 因为标识符(类)是未定义的......

2 个答案:

答案 0 :(得分:3)

在使用之前需要声明一个类型。由于您在类之间存在相互依赖性,因此需要使用前向声明。

class B; // Forward declaration so that B can be used by reference and pointer
         // but NOT by value.

class A{ public: doSomething(B & b); }

class B{ public: doSomething(A & a); }

请注意,这通常被认为是非常糟糕的设计,如果可能应该避免使用。

答案 1 :(得分:0)

class A{
public:
    doSomething(B & b);
};

不行,因为编译器还不知道B是什么,后者是定义的。

编译器始终采用自上而下的方法,因此在其他地方使用之前必须看到一个类(已声明或已定义),因此您的代码应为

class A; // Not reqd in your case , but develop a good programming practice of using forward declaration in such situations
class B; // Now class A knows there is asnothed class called B , even though it is defined much later , this is known as forward declaration

class A{
public:
    doSomething(B & b);
}

class B{
public:
    doSomething(A & a);
}