我正在创建一个简单的程序来存储参加某个教室的孩子,每个孩子都有一个定义他们朋友的阵列。
我正在体验
错误:用户定义的从'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 *?
传递感谢您的帮助!
答案 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[]>
。