我正在尝试创建一个由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
}
谢谢你的帮助!
!-更新-!
好的,所以我把代码改成了这个,但是现在它说“没有与‘networkOctet4’初始化匹配的构造函数”.我有一个构造函数,它被声明、定义并完美地工作在不存在于数组中的对象上。
更新代码:
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);
}
}
发布于 2014-02-14 10:04:44
我怀疑您在类型[]
上重载了()
和decltype(networkOctet)
,所以问题是您将名称同时作为变量networkOctet[octet]
和类型networkOctet(ip, subnet)
处理。如果X[4]
类型的变量名为y
,则可以使用以下语法来完成此工作:
y[octet] = X(ip, subnet);
其中y
本身被声明为X y[4]
。
发布于 2014-02-14 10:19:18
只能创建具有默认构造函数的类型数组。如果定义了自己的构造函数,而没有添加默认构造函数,则不能创建此类型的数组,因为编译器在创建数组时尝试对数组中的所有元素(使用默认构造函数)进行值初始化。如果删除默认构造函数,则数组中的元素不能进行值初始化(因为没有默认构造函数),就会出现上述编译器错误。
当编译器看到行时
networkOctet networkOctetObject[4];
它尝试创建4个类型为networkOctet
的对象。要创建这些对象,必须调用networkOctet
的构造函数。在创建数组时,编译器试图调用不可用的默认构造函数。这是发生错误的行。因此,要使代码正常工作,请添加一个默认构造函数
networkOctet() {
// Initialize a networkOctet to a valid default value
}
networkOctet
类(注意,这个默认构造函数必须是public
)。
https://stackoverflow.com/questions/21786301
复制