开发者

Vectors of Pointers, inheritance

Hi I am a C++ beginner just encountered a problem I don't know ho开发者_JAVA技巧w to fix

I have two class, this is the header file:

class A  
{  
public:  
  int i;  
  A(int a);  
};

class B: public A  
{  
public:  
  string str;  
  B(int a, string b);  
};    

then I want to create a vector in main which store either class A or class B

vector<A*> vec;  
A objectOne(1);  
B objectTwo(2, "hi");  
vec.push_back(&objectOne);  
vec.push_back(&objectTwo);  
cout << vec.at(1)->i; //this is fine  
cout << vec.at(1)->str; //ERROR here 

I am really confused, I checked sites and stuff but I just don't know how to fix it, please help

thanks in advance


The reason this won't work is because the objects in your vector are of (static) type A. In this context, static means compile-time. The compiler has no way to know that anything coming out of vec will be of any particular subclass of A. This isn't a legal thing to do, so there is no way to make it work as is. You can have a collection of B, and access the str member, or a collection of A and not.

This is in contrast to a language such as Python, where a member will be looked up in an object's dictionary at runtime. C++ is statically typed, so all of your type-checking has to work out when the code is compiled.


Firstly, post the full error message.

Secondly, if you have an A*, the compiler can't infer that some subclass (B in this case) has a field called str and hence you will get a compiler error.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜