#include <stdio.h>
class B;
class A;
class A
{
int a;
friend int B::f();
};
class B
{
int b;
class A x;
public:
int f();
};
int B::f()
{
// ...
}
main()
{
class B b;
b.f();
}
ERRORS:不完整的類型的錯誤,使用朋友時起作用
a.cpp:9: error: invalid use of incomplete type ‘struct B’
a.cpp:2: error: forward declaration of ‘struct B’
的問題不能通過將B的定義中的前作爲 B具有類型A.
的目的對於來解決這個例子使B的朋友類會做,但在 我的真實代碼,我有更多的B成員函數(所以我需要替代解決方案)。
最後,有人可以給我一些鏈接,解釋編譯器在前向聲明,聲明和定義中所做的 。
問題是,C++編譯器是一個「一遍」的編譯器,意思是它不會試圖保留它現在無法理解的東西,並在以後嘗試解決它,當它有更多信息時這個例子,關於B類)。爲什麼今天仍然如此,超越了我。無論如何,就我所知,使B成爲A的朋友類將會奏效。或者你的意思是你必須允許訪問B之外的其他成員功能? – Baltasarq
@Baltasarq:想象根據*之後的內容*編譯成相同的代碼片段。哪個編譯語言具有這個「功能」? – eudoxos
@eudoxos:Java,一個。它的語法需要一個多通道編譯器。而另一個C++(但只在一個類中)。例如,'class Foo {public:set_item(int val){item = val;} private:int item;};' –