繁体   English   中英

无效的用户定义转换错误

[英]invalid user-defined conversion error

我正在创建一个简单的程序来存储参加某个教室的孩子,每个孩子都有一个定义他们朋友的数组。

我正在经历

错误:从“Kids*”到“Kids&&”的无效用户定义转换 [-fpermissive]|

错误。 我正在使用此代码

struct Kids{
    int *friends;
    Kids(){};
    Kids( int n ){
        friends = new int[n];
    }
};
class Classroom{
    Classroom(){
        cin >> size;
        kids = new Kids[ size ];
        for(int i = 0; i < size ; i++){
            kids[i] = new Kids(i);
        }
    }
private:
    int size;
    Kids *kids;
};

为什么是这条线

kids[i] = new Kids[i];

编译器考虑尝试将 Kids* 转换为 Kids&&,而我正在创建节点的新实例,例如动态分配它从而将其作为 Kids* 传递?

感谢帮助!

new Kids(i)创建一个由i初始化的Kids对象并返回指向它的指针。

kids[i]Kids对象(左值),而不是指针。

这些类型根本不兼容。

kids数组已由第一条指令( kids = new Kids[ size ]; )分配,无需再次分配。

如果你想用它的索引初始化每个孩子,你应该能够输入:

kids[i] = Kids(i);

但是你似乎打破了规则three/fize/zero ,所以YMMV。

顺便说一句,与其自己做所有艰苦的工作,不如让图书馆为您做,并使用集合/智能指针,而不是手动管理您的资源。 使用std::vector<Kids>std::unique_ptr<Kids[]> ,以适合您的需求为准。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM