无效的用户定义转换错误

invalid user-defined conversion error

本文关键字:转换 错误 定义 用户 无效      更新时间:2023-10-16

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

我正在经历

错误:用户定义的从'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&&而我正在创建一个新的节点实例,例如动态分配它,从而传递它作为孩子*?

谢谢你的帮助!

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

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

这些类型根本不兼容。

kids数组已经被第一条指令(kids = new Kids[ size ];)分配了,没有必要再做一次。

如果你想用它的索引来初始化每一个子元素,你应该只需要输入:

kids[i] = Kids(i);

但是你似乎打破了3/fize/0的规则,所以YMMV。

顺便说一下,与其自己做所有的艰苦工作,不如让库为你做,并使用集合/智能指针,而不是手动管理资源。使用std::vector<Kids>std::unique_ptr<Kids[]>,根据您的需要选择。