2016-11-02 9 views
-1

В моем коде на C++ у меня есть такое определение;Использование extern & inline

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

extern A* 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() где-то в коде инициализации. Более правильным способом было бы вызвать Func(A *a) с аргументом вместо использования вашего выражения «extern».

+2

, вы могли бы объяснить OP, что 'Func' должен сделать в этом примере ... не стесняйтесь редактировать свой ответ, чтобы сделать его лучше –

+0

Большое вам спасибо ... Это работает ... – qwerty