gpt4 book ai didi

arrays - GCC:数组类型具有不完整的元素类型

转载 作者:太空狗 更新时间:2023-10-29 16:23:26 25 4
gpt4 key购买 nike

我已经声明了一个 struct,我尝试将这些结构的数组(以及一个 double double 组和一个整数)传递给一个函数.我在编译 gcc 时收到 “数组类型具有不完整的元素类型” 消息。我在将 struct 传递给函数时出了什么问题?

typedef struct graph_node {
int X;
int Y;
int active;
} g_node;

void print_graph(g_node graph_node[], double weight[][], int nodes);

我也试过 struct g_node graph_node[],但我得到了同样的结果。

最佳答案

导致问题的是数组:

void print_graph(g_node graph_node[], double weight[][], int nodes);

必须给出第二个及后续维度:

void print_graph(g_node graph_node[], double weight[][32], int nodes);

或者你可以只给出一个指向指针的指针:

void print_graph(g_node graph_node[], double **weight, int nodes);

然而,尽管它们看起来相似,但内部却大不相同。

如果您使用的是 C99,则可以使用可变限定数组。引用 C99 标准中的示例(§6.7.5.2 数组声明符部分):

void fvla(int m, int C[m][m]); // valid: VLA with prototype scope

void fvla(int m, int C[m][m]) // valid: adjusted to auto pointer to VLA
{
typedef int VLA[m][m]; // valid: block scope typedef VLA
struct tag {
int (*y)[n]; // invalid: y not ordinary identifier
int z[n]; // invalid: z not ordinary identifier
};
int D[m]; // valid: auto VLA
static int E[m]; // invalid: static block scope VLA
extern int F[m]; // invalid: F has linkage and is VLA
int (*s)[m]; // valid: auto pointer to VLA
extern int (*r)[m]; // invalid: r has linkage and points to VLA
static int (*q)[m] = &B; // valid: q is a static block pointer to VLA
}

评论中的问题

[...] In my main(), the variable I am trying to pass into the function is a double array[][], so how would I pass that into the function? Passing array[0][0] into it gives me incompatible argument type, as does &array and &array[0][0].

在你的main()中,变量应该是:

double array[10][20];

或类似的东西;也许

double array[][20] = { { 1.0, 0.0, ... }, ... };

你应该可以用这样的代码传递它:

typedef struct graph_node
{
int X;
int Y;
int active;
} g_node;

void print_graph(g_node graph_node[], double weight[][20], int nodes);

int main(void)
{
g_node g[10];
double array[10][20];
int n = 10;

print_graph(g, array, n);
return 0;
}

使用 GCC 4.2 (i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (基于 Apple Inc. build 5658) (LLVM build 2336.9.00)) 干净地编译(目标代码)和还可以在 Mac OS X 10.7.3 上使用命令行使用 GCC 4.7.0:

/usr/bin/gcc -O3 -g -std=c99 -Wall -Wextra -c zzz.c

关于arrays - GCC:数组类型具有不完整的元素类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10003270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com