2011-04-01 113 views
3

我有一個afporoills類,它可以幫助查找我們的內存管理模塊中的數據。 (不要問爲什麼這樣一個奇怪的名字我不知道)未定義的引用vtable

class afporoills{ 
    void** test(int pos); 
}; 
void** afporoills::test(int pos){ 
    int x=(pos<<3)|1023*x; 
    void** ret=(void**)x; 
    if((int)ret%16) return this.test(pos+1); 
    void* (*fp)(float, uint16__t)=x; 
    ret=ret+(*fp)(1.0f, (uint16__t)pos); 
    return ret; 
} 
int test(){ 
    afporoills afporoills14; 
    return ((char*) (uint32_t) ((uint32_t) (void*) afporoills14.test(((((uint32_t)))((char*) (void*))1)); 

} 

我不斷收到

[鏈接錯誤]未定義參考`虛表的afporoills`

,但我不知道什麼是vtable是!我沒有使用過,爲什麼會出現錯誤?

請幫助我,因爲我不能繼續寫這個類,如果我不擺脫那個錯誤。

我還需要做什麼才能使test方法完成圖靈?

+2

http://en.wikipedia.org/wiki/Virtual_method_table – DumbCoder 2011-04-01 10:20:34

+2

圖靈完成? – NPE 2011-04-01 10:21:34

+0

@DumbCoder感謝你的鏈接,但你可以看到我不使用虛擬方法!那爲什麼會有這個錯誤? @aix是的,這是需要的方法是圖靈完成... – n00b 2011-04-01 10:21:38

回答

7

這很可能是因爲你在Base類中聲明瞭一個虛擬方法而沒有定義它,即沒有爲基類中提供的虛函數提供函數體。

嘗試給它一些假身體和編譯它可能只是工作。我最近在類似的情況下得到了這個錯誤,通過提供一個定義來解決這個問題。

+0

好,謝謝,圖靈完備性問題呢? – n00b 2011-04-01 12:44:09

1

錯誤表明您沒有定義您的基類的虛函數,編譯器在基類的虛方法表中找不到此函數。 每個派生類的對象都有這個虛方法表,它包含派生類中定義的方法的地址。

要解決的錯誤,則還可以定義該函數作爲純虛函數,意味着在基類中沒有功能體,例如:

虛擬INT手柄(結構per_thread_traffic_log * PTTL)= 0;

相關問題