错误:请求'myVector'中的成员'push_back',它是非类类型'std :: vector *'?
Base
是我的基类,它也有派生类derived1
和derived2
。我想要使用动态绑定,制作一个Base
指针的向量,它可以是push_back()
任何Base
,derived1
和derived2
对象。但是,它告诉我,push_back()函数不是正确的类型?错误:请求'myVector'中的成员'push_back',它是非类类型'std :: vector <Base> *'?
守则main()
:
vector<Base> *myVector;
myFunction(myVector);
功能:
void myFunction(vector<Base> *&myVector)
{
Base *b = new Base;
myVector.push_back(b);
delete [] b;
}
使用指针的载体,基地:
vector<Base*>
也不要使用指针向量,就可以通过引用传递载体的功能:
void myFunction(vector<Base*> &myVector)
{
Base *b = new Base;
myVector.push_back(b);
}
在别delete b;
结束myFunction
,因为它会使您的推送指针无效。
最后,你会最终想要的是使用unique_ptr
,所以:
vector<unique_ptr<Base>> myVector;
尝试
vector<Base *> myVector;
代码
vector<Base> * myVector;
创建指向vector<Base>
类型的向量的指针,这不是您想要的。你想要的是vector<Base *>
类型的矢量。
我明白我做错了什么。我认为他们都是同一件事。 – user2871213 2014-09-25 10:55:31
了解你做错了什么是重要的一步,不要再犯同样的错误^ _ ^ – Paladin 2014-09-25 10:59:00
以及你定义你的载体为'Base'类型不是'基地*'型!这行'vector * myVector;'定义了一个指向类型为'Base'的向量的指针,而不是基类指针的向量 –
EdChum
2014-09-25 10:48:16
另外,在将其添加到向量后,您确实不想立即删除指针... (即使你做了,你也会使用'delete'而不是'delete []') – wakjah 2014-09-25 10:50:31
[请阅读此内容](https://dl.dropboxusercontent.com/u/6101039/Modern%20C%2B%2B。 PDF)。 – WhozCraig 2014-09-25 10:52:03