用户定义的转换错误无效

时间:2016-10-14 22:54:27

标签: c++

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

我正在体验

  

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

传递

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

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

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

这些类型根本不兼容。

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

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

kids[i] = Kids(i);

但你似乎打破了rule of three/fize/zero,所以YMMV。

顺便说一下,你应该让图书馆为你做这件事并使用集合/智能指针而不是手动管理你的资源,而不是自己做所有的努力工作。根据您的需要使用std::vector<Kids>std::unique_ptr<Kids[]>