2016-11-30 4 views
0

이것은 나에게는 어리석은 문제 일 수 있습니다. 그러나 나는 프로그램에서 개념적 문제를 얻지 못하고있다. 다음과 같은 문제가 작동하지 않습니다개념적 혼란

내가 전역 함수 및 액세스에 클래스 아동의 포인터를 전달하려는 그 프로젝트의 다른 부분에서 포인터 객체 단지 Child.h가

문제를 포함하여 주에서 get_Child() -> number_1 할 때.

해결 방법 : I 메인에 Child.cpp을 포함하고, 나는 Child.h에서 생성자를 선언하는 대신 Child.cpp

쿼리 요청하면 생성자 또는 인라인합니다. 이 행동의 이유는 무엇입니까? 내가 Child.cpp의 생성자를 선언 할 수 있고, MAIN.CPP에

#ifndef CHILD_H_ 
#define CHILD_H_ 


class Child; 
static Child * pointer_Child; 

inline void save_Child(Child * p_C){ 
    pointer_Child = p_C; 
} 

inline Child * get_Child(){ 
    return pointer_Child; 
} 


class Child { 
public: 

    Child(); 

    //Child(){ 
    // this ->set_Child(); 
    //} 

    void set_Child(){ 
     save_Child(this); 
    } 

    int number_1 = 10; 
}; 

#endif /* CHILD_H_ */ 

MAIN.CPP

#include <iostream> 
#include "Child.h" 
//#include "Child.cpp" 

using namespace std; 

int main(){ 

    Child *pC = new Child(); 
    cout << "direct = " << pC->number_1 << endl; 

    cout << "with function = " << get_Child()->number_1 << endl; 

} 

Child.h을 Child.cpp을 포함하지 않는 방법하는 방법입니다

Child.cpp

#include "Child.h" 

//inline Child::Child(){ 
// this ->set_Child(); 
//} 

Child::Child(){ 
    this->set_Child(); 
} 
+0

링커를 사용하십시오. 나는 프로그램 작성의 세 부분을 설명하는 것으로 시작하지 않는 초보자 C++ 책을 생각할 수 없다 : 전처리 기, 컴파일러, 링커. –

답변

2

(클래스 이외의) 헤더에 정적 변수를 선언하지 이겨 이 :

static Child * pointer_Child; 

헤더를 포함하는 모든 컴파일 단위에서 변수를 만듭니다. 번역 단위 외부에서는 액세스 할 수 없습니다.

대신, pointer_Childextern을 다음과 같이 CPP의 구현을 제공 :

헤더 :

extern Child* pointer_Child; 

CPP :

Child* pointer_Child; 

그리고 결코는 CPP 파일을 포함합니다.

+0

대단히 감사합니다 .. :) –