使用 vector push_back类对象
push_back a class object using vector.
如何将类的对象添加到另一个类中的向量。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class info{
private:
int id;
string name;
public:
info(int extId, string extName) {
this->id = extId;
this->name = extName;
}
};
class db {
private:
vector<info> infoVector;
public:
void pushData(info * data) {
this->infoVector.push_back(&data);
}
};
int main(){
info * testData = new info(123, "nice");
db database;
database.pushData(testData);
return 0;
}
我正在创建一个info
类的对象。该对象包含一个int
和一个string
变量。然后我正在创建db
对象,并在那里传递一个testData
对象。
我在构建项目时收到错误消息。
main.cpp: In member function ‘void db::pushData(info*)’:
main.cpp:23:44: error: no matching function for call to ‘std::vector<info>::push_back(info*&)’
this->infoVector.push_back(data);
^
In file included from /usr/include/c++/5/vector:64:0,
from main.cpp:2:
/usr/include/c++/5/bits/stl_vector.h:913:7: note: candidate: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = info; _Alloc = std::allocator<info>; std::vector<_Tp, _Alloc>::value_type = info]
push_back(const value_type& __x)
^
/usr/include/c++/5/bits/stl_vector.h:913:7: note: no known conversion for argument 1 from ‘info*’ to ‘const value_type& {aka const info&}’
我做错了什么?
看起来您正在尝试将info *
类型的地址传递给 vector<info>::push_back
,它只接受 const info &
或 info &&
的类型。 调用 push_back
时,请尝试使用取消引用运算符 *
而不是地址运算符&
:
this->infoVector.push_back(*data);
但是,这不是使用指针的好方法,如果从矢量中删除或删除data
,可能会导致内存泄漏或段错误。 vector
最好拥有其成员,因此您可以考虑这样做:
class db {
private:
vector<info> infoVector;
public:
void pushData(info data) { // note: not a pointer
this->infoVector.push_back(data); // note: not address-of
}
};
int main(){
info testData(123, "nice"); // note: not a pointer
db database;
database.pushData(testData);
return 0;
}
否则,如果您确实希望infoVector
包含指针,请将其声明为:
std::vector<info*> infoVector;
然后删除地址收件人运算符。
附言,尽可能避免using namespace std
!
你有vector<info>
,你想放info *
,试着做:
int main(){
info testData(123, "nice");
db database;
database.pushData(testData);
return 0;
}
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 将对象转换为 char,然后"uncasting it back"
- push(ing)back在循环中对象指针