2016-02-06 58 views
0

所以我想打電話給使用dynamic_cast的調用一個派生類對象的方法模板內[使用的dynamic_cast]

template<class T> 
void stack<T>::objOps() 
{ 
    T* a = this->arr[top]; 
    char s; 
    Gorilla* TempGorill = dynamic_cast<Gorilla*>(a); 
    cout << "Select Object Functions: " << endl << endl 
     << "<R>oar" << endl; 
    if (TempGorill) { cout << "Chest<B>eating" << endl; } 
    else { cout << "<M>akeFire" << endl << endl; } 
    cout << "Your Choice-> "; cin>>(s); 
    switch(s) 
    { 
    case 'R': case 'r': a->roaR(); 
     if(TempGorill) 
     { case 'B': case 'b': a->chestBeating(); } 
     else { case 'M': case 'm': a->makeFire(); } 
    } 


} 

吼派生類對象的方法都好becasue其在猴子純虛,但是胸部跳動在Goriila中是獨佔的,並且在黑猩猩中燃燒,它們都是猴子的派生類。 奇怪的是,它並打印出正確的方法取決於我選擇使用大猩猩或黑猩猩,但不能訪問他們的方法 錯誤,我得到:

>c:\users\eizzy\documents\visual studio 2010\projects\copiedproject\copiedproject\newstack.h(135): error C2039: 'chestBeating' : is not a member of 'monkey' 
    1>   c:\users\eizzy\documents\visual studio 2010\projects\copiedproject\copiedproject\monkey.h(8) : see declaration of 'monkey' 
    1>   c:\users\eizzy\documents\visual studio 2010\projects\copiedproject\copiedproject\newstack.h(122) : while compiling class template member function 'void stack<T>::objOps(void)' 
c:\users\eizzy\documents\visual studio 2010\projects\copiedproject\copiedproject\newstack.h(136): error C2039: 'makeFire' : is not a member of 'monkey' 
1>   c:\users\eizzy\documents\visual studio 2010\projects\copiedproject\copiedproject\monkey.h(8) : see declaration of 'monkey' 

感謝您的幫助。

+0

'stack'!='std :: stack'我希望?使用自己類型的標準庫中的名字和'using namespace std;'的明顯用法的組合有點麻煩tbh。 –

+0

'if(TempGorill){case'B':case'b':a-> chestBeating(); }' - 這是我見過的'case'最奇怪的用法。這是否編譯? – PaulMcKenzie

+0

我是一個學生,可能不像你我猜的那樣專業。 沒有編譯,這就是爲什麼在這裏 –

回答

0

在你的開關範圍內,你不應該做'TempGorill-> chestBeating()'嗎?

+0

賓果!感謝很多人! –

相關問題