嵌套结构赋初值时用变量编译不通过!

时间:2021-01-24 18:12:56
结构定义:
struct _TEST
{
    int d1;
    int d2;
};

struct _TEST_E
{
    int   e1;
    _TEST e2; //嵌套结构体
};

用常量赋初值,编译通过
_TEST_E test_e = {3,{1,2}};

用变量赋初值,编译报错
_TEST test     = {1,2};
_TEST_E test_e = {3,test};

VC编译的错误信息:
error C2440: 'initializing' : cannot convert from 'struct _TEST' to 'int'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

7 个解决方案

#1


vs.net 2003编译通过..

#2


换个编译器吧,语法没有问题

#3


vc6下变通一下
_TEST test     = {1,2};

_TEST_E test_e;
test_e.e1=3;
test_e.e2=test;

#4


变通太麻烦了,我是想在外部定义赋了初值的常变量,变通后我就得再增加一个初始化的全局函数来负责赋值了.
另外:
vs.net 2003编译通过是用的C#的编译器还是VC++.NET的编译器,或者这两个编译器一样吗?
不知道GCC下是否可以编译通过?

#5


>> 不知道GCC下是否可以编译通过?

用 GCC 3.4.0,通过。

#6


早一些的编译器中,声明时的初始化必须使用常量。
如: 
    int a[3]={1,2,3};
而不能用变量去赋值。这就是为什么第一次能通过而后一种通不过的原因。

error C2440: 'initializing' : cannot convert from 'struct _TEST' to 'int'
                              --------------------------------------------
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    可能是因为c遗留的“弱类型”问题,在c中,默认的类型是int。加上上而所述原因,就是错误中划线部分的解释。

#7


用VS.net2003的编译器试了一下,果然可以;
用REDHAT8带的那个GCC试了一下,也确实可以.
所以决定从此换开发环境了,WINDOWS下全面转向VS.NET2003.
VC6从出来就开始用,去年准备转向2003的,安装了,觉得太大,我又只是用MFC,所以又卸掉了,
现在看来是放弃VC6的时候了.安装2003用了1个多小时.还是VC6简洁快速.
不过我现在基本还是用MFC,但可以逐渐熟悉一下C#和.NET库了.
多谢上面几位指点,一会逐个给分.刚注册的,分不多,XD们见谅.还得现场学习下怎么发钱^-^

#1


vs.net 2003编译通过..

#2


换个编译器吧,语法没有问题

#3


vc6下变通一下
_TEST test     = {1,2};

_TEST_E test_e;
test_e.e1=3;
test_e.e2=test;

#4


变通太麻烦了,我是想在外部定义赋了初值的常变量,变通后我就得再增加一个初始化的全局函数来负责赋值了.
另外:
vs.net 2003编译通过是用的C#的编译器还是VC++.NET的编译器,或者这两个编译器一样吗?
不知道GCC下是否可以编译通过?

#5


>> 不知道GCC下是否可以编译通过?

用 GCC 3.4.0,通过。

#6


早一些的编译器中,声明时的初始化必须使用常量。
如: 
    int a[3]={1,2,3};
而不能用变量去赋值。这就是为什么第一次能通过而后一种通不过的原因。

error C2440: 'initializing' : cannot convert from 'struct _TEST' to 'int'
                              --------------------------------------------
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    可能是因为c遗留的“弱类型”问题,在c中,默认的类型是int。加上上而所述原因,就是错误中划线部分的解释。

#7


用VS.net2003的编译器试了一下,果然可以;
用REDHAT8带的那个GCC试了一下,也确实可以.
所以决定从此换开发环境了,WINDOWS下全面转向VS.NET2003.
VC6从出来就开始用,去年准备转向2003的,安装了,觉得太大,我又只是用MFC,所以又卸掉了,
现在看来是放弃VC6的时候了.安装2003用了1个多小时.还是VC6简洁快速.
不过我现在基本还是用MFC,但可以逐渐熟悉一下C#和.NET库了.
多谢上面几位指点,一会逐个给分.刚注册的,分不多,XD们见谅.还得现场学习下怎么发钱^-^