C &引用;请求加入非结构或联盟的成员”;再一次

C &引用;请求加入非结构或联盟的成员”;再一次,c,C,很抱歉,如果我问了一个以前做过很多次的问题,但我没有找到解决方案 我有这个typedef结构 typedef struct { int matrix[row][col]; }Position; 我创建了一个变量 Position park[weeks]; 然后我在子程序中调用它 void foo(struct Position *park[weeks]...) 然后 park[s].matrix[i][j]=car

很抱歉,如果我问了一个以前做过很多次的问题,但我没有找到解决方案

我有这个typedef结构

typedef struct                          
    {
    int matrix[row][col];
    }Position;
我创建了一个变量

Position park[weeks];
然后我在子程序中调用它

void foo(struct Position *park[weeks]...)
然后

park[s].matrix[i][j]=car[k].id;
我在上面这行有“请求等”错误。我做错了什么?
对不起,我的英语不好。

只需删除you foo中的*即可。那么一切都会好起来的

void foo( Position *park[weeks]...)

==>

void foo(Position park[weeks]...)

像这样:

typedef struct                          
{
    int matrix[2][2];
}Position;


void foo(Position *park)
{
    park[1].matrix[1][1]=5;
}

int main()
{
    Position park[2];
    foo (park);
    return 0;
}
我不明白为什么typedef struct应该放在main中,但是,如果必须的话,也许你也可以把函数放在main中:

int main()
{
    typedef struct                          
    {
    int matrix[2][2];
    }Position;

    void foo(Position *park)
    {
    Position *park1 = (Position *)park;
    park1[1].matrix[1][1]=5;
    };
    Position park[2];
    foo (park);
    printf("%d\n",park[1].matrix[1][1]);
    return 0;
}

只需删除you foo中的*即可。那么一切都会好起来的

void foo( Position *park[weeks]...)

==>

void foo(Position park[weeks]...)

像这样:

typedef struct                          
{
    int matrix[2][2];
}Position;


void foo(Position *park)
{
    park[1].matrix[1][1]=5;
}

int main()
{
    Position park[2];
    foo (park);
    return 0;
}
我不明白为什么typedef struct应该放在main中,但是,如果必须的话,也许你也可以把函数放在main中:

int main()
{
    typedef struct                          
    {
    int matrix[2][2];
    }Position;

    void foo(Position *park)
    {
    Position *park1 = (Position *)park;
    park1[1].matrix[1][1]=5;
    };
    Position park[2];
    foo (park);
    printf("%d\n",park[1].matrix[1][1]);
    return 0;
}
改变

您已将
parks
声明为指向
Position
的指针数组,因此必须使用运算符
->
访问
矩阵
成员

或者,你也可以写作

(*park[s]).matrix[i][j]=car[k].id;
但是
->
操作符有点干净。

更改

park[s].matrix[i][j]=car[k].id;

您已将
parks
声明为指向
Position
的指针数组,因此必须使用运算符
->
访问
矩阵
成员

或者,你也可以写作

(*park[s]).matrix[i][j]=car[k].id;


但是
->
操作符稍微干净了一点。

它会给出任何错误吗?你为什么不试试?什么是
car[k]。id
Yes,在标题中给出错误!car[k].id是一个变量,问题不在这里阅读此答案:注意:
void foo(struct Position*park[weeks])
应该是
void foo(Position*park[weeks])
不需要使用
struct
car也是一个名为id的结构数组。它是否给出了任何错误?你为什么不试试?什么是
car[k]。id
Yes,在标题中给出错误!car[k].id是一个变量,问题不在这里阅读此答案:注意:
void foo(struct Position*park[weeks])
应该是
void foo(Position*park[weeks])
不需要使用
struct
car也是一个名为id的结构数组。已经尝试过了,给出了错误“取消引用指向不完整类型的指针“@user2699575我想你需要删除你
foo
中的
*
,如果你想使用变量
park
@user2699575:
struct Position
Position
是C中的两种不同类型,而前者在你的代码中并不存在。你好@LidongGuo。”。如果我删除struct,我会得到错误“unknown type name”,我想这是因为类型的声明在main中,并且不全局可见。问题是,在类型的声明中,我必须放入在运行时计算的两个变量,为此,我不能在main之外声明新的类型结构。@FabriNeral您也可以尝试将foo放入main。已经尝试过了,给了我错误“取消引用指向不完整类型的指针”@user2699575我想你需要删除你
foo
中的
*
,如果你想使用变量
park
@user2699575:
struct Position
Position
在C中是两种不同的类型,前者在你的代码中不存在。你好@LidongGuo。如果我删除struct,我会得到错误“unknown type name”,我想这是因为类型的声明在main中,并且不全局可见。问题是,在类型的声明中,我必须放入一些在运行时计算过的变量,因此我不能在main之外声明新的类型struct。@FabriNeral您也可以尝试将foo放入main中。还要删除foo()定义中的'struct'还要删除foo()定义中的'struct'