2016-11-02 11 views
-1

私のC++コードでは、私はそのような定義を持っています。externとinlineの使用

class A { 
    int i; 
public: 
    void setI(int temp) { 
     i = temp; 
    } 
}; 

extern A* a; 

その後、引数の値から得られたストリームを変数に代入する関数があります。

inline void Func() { 
    ... // Stream definition with ifstream etc. 
    int k; 
    stream >> k; 
    a->setI(k); // Gives segmentation fault... 
} 

理由は何でしょうか? ありがとうございます...

+3

'a'はポインタです。おそらく初期化されていないでしょう。 'a'はどこに宣言されていますか? –

+0

ポインタは有効なメモリ位置を指示する必要があります。 – Mahesh

+2

あなたは他人があなたを助けるために[mcve](http://stackoverflow.com/help/mcve)を提供する必要があります... –

答えて

2

初期化コードのどこかにa = new A()を使用してください。より良い方法は、 "extern"ステートメントを使用する代わりに、Func(A *a)を引数で呼び出すことです。

+2

あなたは 'Func'がいくつかの例で何をすべきかを説明することができました...あなたの答えを編集することを躊躇しないでください –

+0

ありがとう... – qwerty

関連する問題