数组中的C++对象owerwrited
C++ Objects in Array owerwritten
我有一个类,我在其中生成新对象并将它们存储在数组中。问题是,一旦我添加第二个对象,第一个对象的数据就会被第二个的数据覆盖。我做错了什么?感谢
Rotor rot[100]; // How can I make this flexible?
int main(int argc, char **argv) {
for (int i = 1; i < (argc - 1); i++) {
ifstream inFile;
inFile.open(argv[i]);
if (inFile.fail()) {
throw std::invalid_argument("Error reading file!");
return 1;
}
rot[i] = Rotor();
int n;
while (inFile >> n) {
rot[i].import(n);
}
}
...
转子类别:
#include "Rotor.h"
int inmap[26];
int outmap[26];
int impcount;
Rotor::Rotor() {
impcount = 0;
}
void Rotor::import(int i) {
outmap[i] = impcount;
inmap[impcount] = i;
impcount++;
}
现在rotor[1].outmap[0]一开始是1,但在我添加rotor[2]后,它变为与rotor[2]相同的值。outmap[0]=2。是否还有一种方法可以使数组长度灵活,从而只使用所需的空间?它在以后的方法中是必需的。
感谢
Rotor
类使用静态数组(由所有实体共享)来存储其内部数据。这就是为什么Rotor的每个后续实例都会覆盖第一个实例的原因。这太糟糕了。通常,您应该避免在C++程序中使用静态(全局)数据。
int inmap[26];
int outmap[26];
int impcount;
你需要让这些私人成员的类:
class Rotor{
private:
int inmap[26];
int outmap[26];
int impcount;
// other private members here
public:
// constructor and other public methods here
};
就使阵列变得灵活而言,您可以手动完成(使用堆上分配的阵列,并在项目数量等于容量时调整阵列的大小——您可以通过分配新阵列、复制旧阵列的内容和删除原始阵列,在每次满足当前容量时将容量增加一倍),或者更简单、更不容易出错,只需使用诸如CCD_ 2之类的动态阵列实现。
您正在全局范围中声明变量。
请查看cpp作用域:
http://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm
正如迈克所说,你需要在课堂上申报。我想你想直接访问这些数组,比如:myrotorobject.inmap[0]。然后我建议将它们设置为Public,而不是Private。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 数组中的C++对象owerwrited