2013-06-18 59 views
2

我有2類,如下每個人都有頭文件類中的一個具有功能如下:未定義的函數調用引用?

int call_thread() 
    { 
    pthread_create(&thread, NULL, &Print_data, NULL); 
    return 0; 
    } 

我試圖調用此方法在2類:

void position::tick(schedflags_t flags) 
{ 
    call_thread(); 
    } 

我總是得到一個錯誤undefined reference to 'call_thread()'。我也試圖聲明它是靜態的,但它給了我一個錯誤:that is "" Static function declared but not defined""。 我錯過了什麼? 注意:我包含了課程1的頭文件。

+3

您是如何編制?在我看來,編譯器無法找到帶定義的.cpp文件。 – olevegard

+0

如果'call_thread()'是一個單純的函數,它必須至少在'.h'-file或者'.cpp'文件中聲明至少一次 –

+0

call_thread在第一類的h文件中聲明,第二類只包含第一個的h文件 – Zeyad

回答

2

我的猜測是,你已經宣佈在Class1的定義call_thread():

class Class1 
{ 
    public: 
    int call_thread(){...} 
} 

然後你試圖調用類的位置這個方法:

void position::tick(schedflags_t flags) 
{ 
    call_thread(); 
} 

call_thread()是一個Class1成員函數,並且您需要Class1的一個實例來調用它,如果它是靜態成員,則需要類名稱:

void position::tick(schedflags_t flags) 
{ 
    //for static member 
    Class1::call_thread(); 

    //for instance member 
    Class1 object; 
    object.call_thread(); 
} 
1

如果你有類,你應該有對象,所以你可以調用公共方法(函數)。

試試象下面這樣:在Class1.h

class Class1{ 
public: 
    Class1(); //constructor 
    ~Class1(); //destructor 

    int call_thread(); 
} 

然後在Class2中,你應該有一個對象,是這樣的:

void position::tick(schedflags_t flags) 
{ 
    Class1 obj; 
    obj.call_thread(); 
}