2016-11-30 42 views
0

這可能是一個愚蠢的問題。但是我沒有收到這個計劃中的概念問題。概念混亂

我想通過類兒童指針在全球的功能和訪問,從項目的不同部分的指針對象,只需要包含Child.h

問題:以下問題不能正常工作當我做get_Child() - > number_1在主。

解決方案:如果我在包括主的Child.cpp,和內聯構造或 如果我在Child.h聲明構造代替Child.cpp

查詢請求。這種行爲的原因是什麼?一種方法,我怎麼能在Child.cpp聲明構造和沒有包括Child.cpp在main.cpp中

的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

#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_ */ 

Child.cpp

#include "Child.h" 

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

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

使用鏈接器。我想不出一本初學C++的書,它不是從描述構建程序的三個部分開始的:預處理器,編譯器,鏈接器。 –

回答

2

不要在頭(類外)聲明靜態變量lik e:

static Child * pointer_Child; 

它會在每個包含標題的編譯單元中創建一個變量。他們不能從翻譯部門以外訪問。

相反,要pointer_Childextern,並提供在CPP實現如下:

頁眉:

extern Child* pointer_Child; 

CPP:

Child* pointer_Child; 

而且從來沒有包括CPP文件。

+0

非常感謝.. .. :) –