指针向量,继承 我是一个C++初学者,遇到了一个问题,我不知道如何修复< /P>
我有两个类,这是头文件:指针向量,继承 我是一个C++初学者,遇到了一个问题,我不知道如何修复< /P>,c++,inheritance,pointers,vector,C++,Inheritance,Pointers,Vector,我有两个类,这是头文件: class A { public: int i; A(int a); }; class B: public A { public: string str; B(int a, string b); }; 然后我想在main中创建一个向量,它存储类a或类B vector<A*> vec; A objectOne(1); B objectTwo(2, "hi"); vec.push_b
class A
{
public:
int i;
A(int a);
};
class B: public A
{
public:
string str;
B(int a, string b);
};
然后我想在main中创建一个向量,它存储类a或类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
vec;
A)1(1);
B两(2,“hi”);
向量推回(&objectOne);
向量推回(&objectTwo);
我不能//这很好
cout-str//这里出错
我真的很困惑,我检查了网站和东西,但我只是不知道如何修复它,请帮助
提前感谢首先,发布完整的错误消息
其次,如果您有一个
A*
,编译器无法推断某个子类(在本例中为B)有一个名为str
的字段,因此您将得到一个编译器错误。首先,发布完整的错误消息
其次,如果你有一个
A*
,编译器无法推断某个子类(在本例中是B)有一个名为str
的字段,因此你会得到一个编译器错误。这不起作用的原因是因为向量中的对象是(静态)类型A
。在这种情况下,静态意味着编译时。编译器无法知道从vec
中产生的任何内容将属于A
的任何特定子类。这不是一件合法的事情,所以没有办法让它正常工作。您可以拥有B
的集合,并访问str
成员,也可以拥有a
的集合而不访问
这与Python等语言不同,Python在运行时将在对象的字典中查找成员。C++是静态类型的,所以所有的类型检查都必须在编译代码时进行。 原因是因为vector中的对象是(静态)类型<代码> A<代码>。在这种情况下,静态意味着编译时。编译器无法知道从
vec
中产生的任何内容将属于A
的任何特定子类。这不是一件合法的事情,所以没有办法让它正常工作。您可以拥有B
的集合,并访问str
成员,也可以拥有a
的集合而不访问
这与Python等语言不同,Python在运行时将在对象的字典中查找成员。C++是静态类型的,所以所有类型检查都必须在编译代码时进行。