ある種の階層を作成していますが、ベクターに要素を追加するのに問題があります。コードを単純化しましたが、期待どおりに要素をベクターに追加できません。階層は次のようになります。
Pdb > チェーン > 文字列
Pdb と Chain はクラス名で、strings は Chain に属するベクトルの名前です。文字列を文字列に追加するために push_back できません。私のコードを見ると、より良いアイデアが得られるかもしれません:
チェーン クラス:
class Chain {
string chain_id;
vector<string> strings;
public:
Chain(string id_) { chain_id = id_; }
vector<string> GetStrings() { return strings; }
void AddString(string s) {
cout << "Size of strings BEFORE push_back in AddString: " << strings.size() << endl;
strings.push_back(s);
cout << "Size of strings AFTER push_back in AddString: " << strings.size() << endl;
}
string GetChainId() { return chain_id; }
};
Pdb クラス:
class Pdb {
string pdb_id;
vector<Chain> chains;
public:
Pdb(string id_) { pdb_id = id_; }
vector<Chain> GetChains() { return chains; }
void AddChain(Chain c) { chains.push_back(c); }
string GetPdbId() { return pdb_id; }
};
主要:
int main () {
vector<Pdb> pdbs;
pdbs.push_back(Pdb("1ubq"));
cout << "\n\t1. " << pdbs[0].GetPdbId() << endl;
pdbs[0].AddChain(Chain("A"));
cout << "\n\t2. " << pdbs[0].GetChains()[0].GetChainId() << endl;
pdbs[0].GetChains()[0].AddString("Whateva");
cout << "\n\t3. Size of strings after AddString in main: " << pdbs[0].GetChains()[0].GetStrings().size() << endl;
return 0;
}
これは以下を出力します:
1. 1ubq
2. A
Size of strings BEFORE push_back in AddString: 0
Size of strings AFTER push_back in AddString: 1
3. Size of strings after AddString in main: 0
ご覧のとおり、AddString 関数は AddString 関数自体の中で文字列に要素を追加していますが、メインに GetStrings を戻すと、AddString を実行した後、文字列は空になります。なぜこれが起こっているのかわかりません。どんな助けでも大歓迎です。