简单地说,我无法从 Vector 中的对象调用非继承方法。
我正在使用 Qt Creator 2.7.0,据我所知,它还没有使用完整的 C++11(?) - 我不确定这是否是导致以下问题的原因(尽管我很确定是我不是 IDE/编译器):
我有 3 个从基类继承的类,每个类都有一个额外的原语/getter/setter。
简单地说,我的课程看起来像:
class A
{
public:
virtual std::string getName() = 0 ;
virtual void setName(std::string) = 0 ;
virtual int getNumber() ;
virtual void setNumber(int) ;
protected:
std::string name ;
int number ;
}
class B : public A
{
public:
std::string getName() ;
void setName(std::string) ;
int getNumber() ;
void setNumber(int) ;
std::string getEmail() ;
void setEmail(std::string) ;
protected:
std::string email ;
}
在我的主要我有一个指针向量,即:
std::vector<A*> contacts ;
//Add Pointers to Vector
A *a ;
B *b ;
contacts.push_back(a) ;
contacts.push_back(b) ;
然后我检查 Object Class Type,以确保它属于 B 类。
if (dynamic_cast<B*>(contacts.at(1)) != NULL) //nullptr not working in Qt yet
{
我可以访问 A 类的 getter 和 setter,但不能访问 B:
std::string name = contacts.at(1)->getName() ; //Works
std::string email = contacts.at(1)->getEmail() ; //Compiler Error: 'class A' has
//no member named 'getEmail'
}
错误(“A 类”没有名为“getEmail”的成员)发生在编译时而不是运行时。
我看不出它是对象切片,因为这应该都是多态的,我应该使用某种类型的 C++ Casting吗?
任何帮助或朝正确方向踢球将不胜感激,谢谢。