将元素推入向量

Pushing element into vector

本文关键字:向量 元素      更新时间:2023-10-16
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
}

我尝试将元素添加到向量中的行会给出编译器错误。我该如何解决这个问题?

不能将类型 B* 的元素推送到旨在获取 A<B> 元素的向量中。你想实现什么?

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

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

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

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

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

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

我认为您可能想要的是这样的东西:

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

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

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

两个错误:

  • push_back带下划线。
  • 您没有将B*转换为A<B>的函数
vec不接受

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

vector< B* > vec;

首先,您的向量存储类型为 A<B> 而不是 B* 的项目。其次,push_back不是反击。