我有以下代码,我多次阅读和阅读它似乎总是没问题,但编译器说:
错误:分配到类型' struct类型[10]'时不兼容的类型 来自类型'类型'
这是代码:
#include <stdio.h>
typedef struct
{
int a;
int b;
} Type;
typedef struct
{
Type (*typeArray)[10];
} Type2;
void someFunction(Type2 *type2Variable, Type (*typeArray)[10])
{
Type typeNewValue;
type2Variable->typeArray[0] = typeNewValue; /* This throws the error */
}
int main(int argc, char **argv)
{
Type typeArray[10];
Type2 type2Variable;
someFunction(&type2Variable, &typeArray);
}
我确定解决方案只是某处*
,但我无法找到它。
更新
非常感谢您的回答,这只是一个显示我的问题的无意义的例子(这不是真正的代码)。
解决方案是:
(*type2Variable->typeArray)[0] = typeNewValue;
而不是:
type2Variable->typeArray[0] = typeNewValue;
答案 0 :(得分:1)
Type (*typeArray)[10]
向类型为Type
的大小为10的数组声明指针。您似乎想要声明一个Type
:
typedef struct
{
Type typeArray[10];
} Type2;
void someFunction(Type2 *type2Variable, Type * typeArray) { /* ... */ }
答案 1 :(得分:0)
您正在尝试分配一个Type
,其中Type[10]
是预期的,这正是编译器所抱怨的。您必须将Type2::typeArray
成员从Type (*typeArray)[10];
更改为Type typeArray[10];
才能使该作业生效。
答案 2 :(得分:0)
您为参数选择的名称有助于混淆事物。
编写代码的方式,指示行上的错误
type2Variable->typeArray[0] = typeNewValue; /* This throws the error */
是因为它应该写成:
type2Variable->typeArray = typeArray; /* to match argument name */
请看这里的论点:
// V-------V
void someFunction(Type2 *type2Variable, Type (*typeArray)[10])
{
Type typeNewValue, *pTypeNewValue;
pTypeNewValue = &typeNewValue;
type2Variable->typeArray = typeArray; //No longer throws error
}
答案 3 :(得分:0)
更改为
void someFunction(Type2 *type2Variable, Type (*typeArray)[10])
{
Type typeNewValue;//uninitialized
type2Variable->typeArray = typeArray;//maybe :) But for what.
(*type2Variable->typeArray)[0] = typeNewValue;
}