2017-01-27 7 views
-3

私はC++で以下のプログラムを実行していますが、コンパイルはしていません。これは、コンパイルエラーの下に私を与える問題C++では関数の順序が明確ではありませんか?

#include<iostream> 
class A; 
void showA(A& x) { 
    // Since showA() is a friend, it can access 
    // private members of A 
    std::cout << "A::a=" << x.a; 
} 
class A 
{ 
    int a; 
public: 
    A() {a = 0;} 
    friend void showA(A& x); // global friend function 
}; 



int main() 
{ 
    A a; 
    showA(a); 
    return 0; 
} 

を見つけるのに役立つしてください:

In function 'void showA(A&)': 
7:27: error: invalid use of incomplete type 'class A' 
:cout << "A::a=" << x.a; 
         ^
3:7: note: forward declaration of 'class A' 
class A; 
    ^
+1

コンパイルされていないプログラムは実行しません。クラスの後に 'showA'の定義を移動するだけです。 **解決済み** – LogicStuff

+0

こんにちは、注意してください:デバッグヘルプ( "**なぜこのコードは動作していないのですか?**")は、望ましい動作、*特定の問題またはエラー*、最短コードそれを再現するのに必要な**その質問自体に**。 **明確な問題文**のない質問は他の読者には役に立たない。参照:[mcve]を作成する方法。 – YSC

答えて

3
class A; 
void showA(A& x) { 
    // Since showA() is a friend, it can access 
    // private members of A 
    std::cout << "A::a=" << x.a; 
} 

我々はAが友人になることを知りません。 Aにはメンバーがいることはわかりません。不完全な型のメンバーにアクセスすることはできません。そうしようとするとは不完全なタイプの無効な使用です。

解決策:メンバーにアクセスする前に、型を完全にする(つまり、クラスを定義する)。

関連する問題