数组中的C++对象owerwrited

C++ Objects in Array owerwritten

本文关键字:对象 owerwrited C++ 数组      更新时间:2023-10-16

我有一个类,我在其中生成新对象并将它们存储在数组中。问题是,一旦我添加第二个对象,第一个对象的数据就会被第二个的数据覆盖。我做错了什么?感谢

    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。