我有一个类,我在其中生成新对象并将它们存储在数组中。问题是,只要我添加第二个对象,第一个对象的数据就会被第二个对象的数据覆盖。我做错了什么?谢谢
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++;
}现在rotor1.outmap在开始时是1,但是在我添加了rotor2之后,它变成了与rotor2.outmap =2相同的值。是否还有一种方法可以使数组长度灵活,以便只使用所需的空间?这在后面的方法中是必需的。
谢谢
发布于 2014-10-28 01:18:43
您的Rotor类使用静态数组(由所有store共享)来存储其内部数据。这就是为什么每个后续的转子实例似乎都会覆盖第一个实例。这是非常糟糕的。通常,您应该避免在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
};就使数组灵活而言,您可以手动完成(使用在堆上分配的数组,当项的数量等于容量时调整数组的大小-每次通过分配新数组,复制旧数组的内容并删除原始数组,每次满足当前容量时,您都可以将容量加倍),或者更简单,更不容易出错,只需使用动态数组实现,如std::vector。
发布于 2014-10-28 01:41:34
您在全局作用域中声明变量。
请看一下cpp作用域:
http://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm
正如mike所说,您需要在类中声明它们。我猜您想要直接访问这些数组,比如: myrotorobject.inmap。那么我建议将它们设置为公共的,而不是私有的。
https://stackoverflow.com/questions/26593039
复制相似问题