将元素推入矢量

时间:2011-05-23 19:30:04

标签: c++ vector

template <class T>
class A{
    //...
};

class B{
    //...
};

class C{
    protected:
    vector< A<B> > vec;
    public:
    void f(B *ptr);      
};

C::f(B *ptr){
    vec.push_back(ptr); // gives error
}

我正在尝试将元素添加到向量中会产生编译错误。我该如何解决这个问题?

8 个答案:

答案 0 :(得分:6)

您无法将B*类型的元素推送到设计为采用A<B>元素的向量中。你想要达到什么目标?

如果你只是想让它编译,那么(假设B是可复制的):

  1. 将您的矢量声明为vector<B>

  2. 使用push_back(*B)。请注意,它不是pushback

答案 1 :(得分:3)

它期待一个A,你给它一个B

A<B> a;
a.initsomehowwith(*ptr);
vec.push_back(a);

答案 2 :(得分:1)

整理你的设计。你到底想要做什么?你有一个A<B>的向量,但是你试图将指针推向B.你是否希望进行某种转换?你的代码从根本上说没有意义。

答案 3 :(得分:1)

我认为你可能想要的是这样的:

void C::f(B &ptr){  // reference not a pointer
    A<B> b_in_a(B) ;
    vec.push_back(b_in_a); // gives error
}

如果你在任何容器模板中使用指针以外的东西,请确保你是复制,赋值和比较运算符是完全实现的。另请注意,除非使用指针,否则无法在容器中存储子类。

答案 4 :(得分:0)

根据reference,方法的名称是push_back,它引用的不是指针。

答案 5 :(得分:0)

两个错误:

  • push_back采用下划线。
  • 您没有将B*转换为A<B>
  • 的功能

答案 6 :(得分:0)

vec不接受B*类型的值,您将其定义为A<B>。您可以将vec重新定义为:

vector< B* > vec;

答案 7 :(得分:0)

首先,您的向量存储A<B>类型而不是B*的项目。 其次是push_back没有后退。