1

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

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

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

这不应该工作吗?

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

4

2 回答 2

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

请注意,这通常被认为是一个非常糟糕的设计,应尽可能避免。

于 2013-06-16T03:50:30.140 回答
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);
}
于 2013-06-16T04:05:05.643 回答