2013-03-09 74 views
0

参考(带符号变量)我试图对一个对象的引用指派到另一可变未能通过另一个变量

scene_t temp = &scene; 

然而,我得到这个错误讯息

error: incompatible types when assigning to type 'scene_t' from type 'struct scene_t *' 

我还试图用一个指针

scene_t temp = *scene 

而且我得到了一个不同的错误

type argument of unary '*' (have 'scene_t') 

我该怎么办?

+0

在C中,本身没有参考文献;该概念适用于C++。有指针,正如编译器所说,你不能将一个指针('struct scene_t *')指定给一个结构体('scene_t',大概相当于'struct scene_t')。第二种表示法试图解引用非指针;你也做不到。你只需要:'scent_t temp = scene;' - 无聊,但很简单。 – 2013-03-09 01:30:58

+0

这个问题似乎是无关紧要的,因为它不太可能在未来帮助其他访问者堆栈溢出。 – 2014-03-03 02:15:29

回答

2

假设的scene类型是scene_t那么它应该是显而易见的&scene类型是scene_t*,这就是编译器抱怨。如果scene_t是一个struct或非阵列typedef内置型,你应该只写

scene_t temp = scene; 

scene_t* temp = &scene; 

取决于你想要的语义。可能是前者。如果scene_t实际上是一个数组类型,那么上面的第一个选项将不起作用。第二个,但实际上是比你需要的字。这将是足够的做

thing_scene_t_is_an_array_of * temp = scene; 

无论哪种方式,您是刚开始一个新的指向旧数据,并覆盖一个覆盖其他,所以要小心。


注意的是,在地址运算符(&)的情况下使用“参考”字表明,您是从C++ POV查看此。 C没有C++风格的引用,你不应该这样想&

+0

thx。我不知道为什么,但第二个工作。但是,第一个根本不工作 – 2013-03-09 01:17:29

+0

如果第一个失败,那么'scene_t'可能基本上是一个数组。 C没有实现数组赋值(但是你可以通过将数组包装到'struct'中来实现)。请注意,第二种情况'* temp'与'scene'是*相同的内存*,覆盖另一个覆盖另一个。 – dmckee 2013-03-09 01:25:39

+0

好的。我知道了。谢谢 – 2013-03-09 01:37:58

相关问题