首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >创建对象数组( c++ )

创建对象数组( c++ )
EN

Stack Overflow用户
提问于 2014-02-14 17:57:34
回答 2查看 136关注 0票数 1

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

代码语言:javascript
代码运行次数:0
运行
复制
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’初始化匹配的构造函数”.我有一个构造函数,它被声明、定义并完美地工作在不存在于数组中的对象上。

更新代码:

代码语言:javascript
代码运行次数:0
运行
复制
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);
    }
}
EN

回答 2

Stack Overflow用户

发布于 2014-02-14 18:04:44

我怀疑您在类型[]上重载了()decltype(networkOctet),所以问题是您将名称同时作为变量networkOctet[octet]和类型networkOctet(ip, subnet)处理。如果X[4]类型的变量名为y,则可以使用以下语法来完成此工作:

代码语言:javascript
代码运行次数:0
运行
复制
y[octet] = X(ip, subnet);

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

票数 1
EN

Stack Overflow用户

发布于 2014-02-14 18:19:18

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

当编译器看到行时

代码语言:javascript
代码运行次数:0
运行
复制
networkOctet networkOctetObject[4];

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

代码语言:javascript
代码运行次数:0
运行
复制
networkOctet() {
    // Initialize a networkOctet to a valid default value
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21786301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档