我正在尝试创建一个由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);
}
}
答案 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
)。