在模板中调用派生 Class 对象的方法 [使用 dynamic_cast]
Calling a Derived Class Object's Method inside a Template [Using dynamic_cast]
所以我正在尝试使用 dynamic_cast
调用派生的 class 对象方法
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(); }
}
}
roaR 很好,因为它在 monkey 中是纯虚拟的,但 chestBeating 在 Goriila 中是 exclusivley,在 chimp 中是 makeFire,它们都是 classes 的猴子。
奇怪的是它确实根据我选择大猩猩或黑猩猩打印正确的方法,但无法访问它们的方法
我得到的错误:
>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'
感谢您的帮助。
在你的开关范围内,你不应该做 'TempGorill->chestBeating()' 吗?
所以我正在尝试使用 dynamic_cast
调用派生的 class 对象方法 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(); }
}
}
roaR 很好,因为它在 monkey 中是纯虚拟的,但 chestBeating 在 Goriila 中是 exclusivley,在 chimp 中是 makeFire,它们都是 classes 的猴子。 奇怪的是它确实根据我选择大猩猩或黑猩猩打印正确的方法,但无法访问它们的方法 我得到的错误:
>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'
感谢您的帮助。
在你的开关范围内,你不应该做 'TempGorill->chestBeating()' 吗?