将元素推入向量
Pushing element into 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
}
我尝试将元素添加到向量中的行会给出编译器错误。我该如何解决这个问题?
不能将类型 B*
的元素推送到旨在获取 A<B>
元素的向量中。你想实现什么?
如果你只是想让它编译,那么(假设B
是可复制的):
-
将您的向量声明为
vector<B>
。 -
使用
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
不是反击。
相关文章:
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 在 C++ 中输出枚举类类型的向量元素
- 用向量的向量元素初始化向量的空向量
- 为什么不允许使用可变长度数组作为向量元素?
- 在函数中传递向量元素
- 使用 Rcpp 加速替换迭代算法中的列表和向量元素是否合法?
- 返回向量元素的 l 值的正确方法是什么?
- 当向量增长时,指向向量元素的C++指针是否无效
- 如何在C++中从一个向量元素减去std::unorderede_map向量元素并更新它
- C++:向量元素赋值导致访问冲突
- 将向量元素与字符串元素进行比较,而不初始化向量
- 从2D矢量中找出最小尺寸的向量元素的更好方法
- 当我尝试将一个向量元素的值分配给另一个向量元素时,为什么我的应用程序会崩溃
- 使用递归C++向量元素的总和
- 如何查找为数组中的最低值编制索引的向量元素
- 限制指针访问STL ::向量元素
- 访问索引指向向量元素时的seg故障 - 做错了什么
- 如何使用指针访问向量元素的各个元素
- 向量元素数据损坏了Find()操作
- 将字符值分配给向量元素.C