错误:请求'myVector'中的成员'push_back',它是非类类型'std :: vector *'?

问题描述:

Base是我的基类,它也有派生类derived1derived2。我想要使​​用动态绑定,制作一个Base指针的向量,它可以是push_back()任何Base,derived1derived2对象。但是,它告诉我,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; 
} 
+1

以及你定义你的载体为'Base'类型不是'基地*'型!这行'vector * myVector;'定义了一个指向类型为'Base'的向量的指针,而不是基类指针的向量 – EdChum 2014-09-25 10:48:16

+3

另外,在将其添加到向量后,您确实不想立即删除指针... (即使你做了,你也会使用'delete'而不是'delete []') – wakjah 2014-09-25 10:50:31

+1

[请阅读此内容](https://dl.dropboxusercontent.com/u/6101039/Modern%20C%2B%2B。 PDF)。 – WhozCraig 2014-09-25 10:52:03

使用指针的载体,基地:

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 *>类型的矢量。

+0

我明白我做错了什么。我认为他们都是同一件事。 – user2871213 2014-09-25 10:55:31

+0

了解你做错了什么是重要的一步,不要再犯同样的错误^ _ ^ – Paladin 2014-09-25 10:59:00