Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无效的用户定义转换错误_C++ - Fatal编程技术网

C++ 无效的用户定义转换错误

C++ 无效的用户定义转换错误,c++,C++,我正在创建一个简单的程序来存储参加某个教室的孩子,每个孩子都有一个数组来定义他们的朋友 我正在经历 错误:从“Kids*”到“Kids&&”的用户定义转换无效[-fppermissive]| 错误。 我正在使用这个代码 struct Kids{ int *friends; Kids(){}; Kids( int n ){ friends = new int[n]; } }; class Classroom{ Classroom(){

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

我正在经历

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

错误。 我正在使用这个代码

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*转换为Kids&&吗

谢谢你的帮助

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

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

这些类型根本不兼容

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

如果您想用索引初始化每个孩子,您应该能够键入:

kids[i] = Kids(i);
但是你似乎打破了这个,所以

顺便说一句,与其自己做所有的艰苦工作,不如让库为您做,并使用集合/智能指针,而不是手动管理资源。使用或,以适合您需要的为准。

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

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

这些类型根本不兼容

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

如果您想用索引初始化每个孩子,您应该能够键入:

kids[i] = Kids(i);
但是你似乎打破了这个,所以


顺便说一句,与其自己做所有的艰苦工作,不如让库为您做,并使用集合/智能指针,而不是手动管理资源。使用或,以适合您需要的为准。

kids[i]
属于
kids
类型
newkids[i]
属于
Kids*
类型(一个
Kids
数组)。我想你的意思是
newkids(I)
,在这种情况下,结果将是
Kids
@Qix
new
始终返回指针类型(或抛出)。
std::vector Kids
std::vector friends
--这样可以去掉
大小
成员,并且不需要任何手动内存管理。为什么那些“新来的孩子”在
教室里
?他们不应该在
块上吗?@davidhigh gcc通过错误消息做了类似的奇怪事情
kids[i]
kids
类型
newkids[i]
属于
Kids*
类型(一个
Kids
数组)。我想你的意思是
newkids(I)
,在这种情况下,结果将是
Kids
@Qix
new
始终返回指针类型(或抛出)。
std::vector Kids
std::vector friends
--这样可以去掉
大小
成员,并且不需要任何手动内存管理。为什么那些“新来的孩子”在
教室里
?他们不应该在
块上吗?@davidhigh gcc在错误消息中做了一些奇怪的事情suh,我注意到拼写错误,应该是kids[i]=new kids(i)@J.dd,这不会有任何区别,你仍然会得到一个指向
kids
对象的指针,而不是对象本身。你对另一种不使用指针的语言有经验吗?@MarkRansom是的,我对js/php很有经验,我正在努力学习c++@J.dd。不需要任何提示。@J.dd-您最后一个问题的快速答案是——它正按照您看到的做。我不是开玩笑。它在右侧创建一个Kids对象,并将其分配给左侧的数组元素。在Java或其他一些语言中,不存在任何偷偷摸摸的引用。它使用赋值,就像你会看到它是一个“简单”类型,比如
int
double
。呃,我注意到拼写错误,它应该是kids[i]=new kids(i)@J.dd,这不会有任何区别,你仍然会得到一个指向
kids
对象的指针,而不是对象本身。你对另一种不使用指针的语言有经验吗?@MarkRansom是的,我对js/php很有经验,我正在努力学习c++@J.dd。不需要任何提示。@J.dd-您最后一个问题的快速答案是——它正按照您看到的做。我不是开玩笑。它在右侧创建一个Kids对象,并将其分配给左侧的数组元素。在Java或其他一些语言中,不存在任何偷偷摸摸的引用。它使用赋值,就像您看到它是否是一个“简单”类型,如
int
double