2016-11-02 5 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'이 몇 가지 예제로 수행해야하는 작업을 OP로 설명 할 수 있습니다. 더 나은 답변을 편집하는 것을 망설이지 말고 ... –

+0

정말 고마워요. 작동합니다 ... – qwerty