矢量push_back在类对象中不起作用
vector push_back not working in class object
我正在制作各种层次结构,并且在向量中添加元素时遇到问题。我简化了代码,但仍然无法按预期向向量添加元素。层次结构如下所示:
Pdb> 链>字符串
Pdb 和 Chain 是类名,字符串是属于 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 << "nt1. " << pdbs[0].GetPdbId() << endl;
pdbs[0].AddChain(Chain("A"));
cout << "nt2. " << pdbs[0].GetChains()[0].GetChainId() << endl;
pdbs[0].GetChains()[0].AddString("Whateva");
cout << "nt3. 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 函数本身的刺痛中,但是当我在执行 AddString 后将 Gets String 重新放入主线程时,字符串为空。我不明白为什么会发生这种情况。任何帮助将不胜感激。
问题是你返回的是成员的副本,而不是成员本身:
vector<Chain> GetChains()
应该是
vector<Chain>& GetChains()
为此工作。
我必须指出,你严重违反了单一责任原则。您直接对成员进行操作,这不是一个好主意。考虑更换:
pdbs[0].GetChains()[0].AddString("Whateva");
用类似的东西
pdbs[0].AddStringToChain(0,"Whateva");
相关文章:
- 在函数中声明的 ifStream 对象在发布模式下不起作用
- 即使我正在.cpp文件中实例化一个伪对象,.cpp文件内模板函数的定义也不起作用
- C++ 对象数组字符串输入在控制台上不起作用
- 自定义类型转换运算符在转发引用上调用时不起作用(当对象按值传递时有效)
- 模板参数类型推导在函数对象中不起作用
- 对列表迭代器指向的对象不起作用的引用
- 更新对象中的值不起作用
- 为什么重载运算符上的异常说明符'<<'不适用于任何 std::ostream 对象,但对库中定义的运算符不起作用?
- GCC:当层次结构中存在虚拟继承时,C++11 内联对象初始化(使用 "this")不起作用
- 抽象类型的对象 - 覆盖不起作用吗?
- 面向对象 成本计算C++不起作用
- 对象的排序向量不起作用
- 操作员=超载不起作用,除非对象已经初始化
- OpenGL 移动对象不起作用
- 使用纹理绘制多个对象不起作用
- 对象池 - 稍后创建对象不起作用
- C++ 中的动态对象不起作用
- 旋转顶点阵列对象不起作用
- VS2012:单元测试错误:断言::AreEqual(对象,对象)不起作用
- 插入大型BSON对象不起作用