クラスのオブジェクトを別のクラスのベクトルに追加する方法。ベクトルを使用するクラスオブジェクトをpush_backします。
#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
クラスのオブジェクトを作成しています。オブジェクトには、1つのint
と1つの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&}’
私は間違っていますか?
それは「へ...のconst情報& 『情報*』から引数1のために知られていない変換」エラーメッセージにあります。 'ベクトル infoVector;は' info'型を受け入れますが、 'info *'型にしようとしています。 –
なぜ新しいものを使用しますか? –
ヤコブが指摘しているよりも少し悪いです。 'pushData'はポインターをとり、そのポインターのアドレスは関数の一時的なローカルポインタで、' push_back'に渡されます。これは与えられたエラーメッセージと一致しません。だから、これはデバッグ中の失火の結果だと思います。参考文献:[参照とポインタの使い分け](https://stackoverflow.com/questions/7058339/when-to-use-references-vs-pointers) – user4581301