创建一个对象数组c ++

时间:2014-02-14 17:57:34

标签: c++ arrays class object syntax-error

我正在尝试创建一个由4个对象组成的数组(c ++)并且我正在使用这种语法,这显然是错误的,但是什么?

for (int octet = 0; octet < 4; octet++) {
        cout << "OCTET NO." << octet << endl;
        cout << "IP:     "; cin >> ip;
        cout << "Subnet: "; cin >> subnet;

        networkOctet[octet] = networkOctet(ip, subnet); //The line where the problem is

        }

感谢您的帮助!

! - 更新 - !

好吧,所以我将代码更改为此,但现在它说“没有用于初始化'networkOctet [4]'的匹配构造函数”...我有一个声明,定义的构造函数,并且在非对象上完美运行在数组中。

更新的代码:

int ip;

int subnet;

networkOctet networkOctetObject[4];

for (int octet = 0; octet < 4; octet++) {
    cout << "OCTET NO." << octet << endl;
    cout << "IP:     "; cin >> ip;
    cout << "Subnet: "; cin >> subnet;
    if (octet == 3) {
        networkOctetObject[octet] = networkOctet(ip, subnet, true);
    }
    else {
        networkOctetObject[octet] = networkOctet(ip, subnet, false);
    }
}

2 个答案:

答案 0 :(得分:1)

我怀疑你在类型[]上超载了()decltype(networkOctet),所以问题在于你将名称视为变量networkOctet[octet]和输入networkOctet(ip, subnet)。如果您的X[4]类型的变量名为y,则可以使用以下语法来完成此任务:

y[octet] = X(ip, subnet);

其中y本身被声明为X y[4]

答案 1 :(得分:1)

您只能创建具有默认构造函数的类型数组。如果您定义了自己的构造函数并且未添加默认构造函数,则无法创建此类型的数组,因为编译器在创建数组时尝试对数组中的所有元素(使用默认构造函数)进行值初始化。如果删除默认构造函数,则无法对数组中的元素进行值初始化(因为没有默认构造函数),并且会出现您提到的编译器错误。

当编译器看到行

networkOctet networkOctetObject[4];

它尝试创建4个networkOctet类型的对象。要创建这些对象,必须调用networkOctet的构造函数。在创建数组时,编译器会尝试调用不可用的默认构造函数。这是发生错误的行。因此,为了使代码工作,可以通过添加

来添加默认构造函数
networkOctet() {
    // Initialize a networkOctet to a valid default value
}

到你的networkOctet类(注意这个默认构造函数必须是public)。