0

私はこのコードを持っています:

#define N 100  //starting size of the array

int is_full(VERTEX *arr);
int add_vertex(char *name);
int print_degree(int ID);
int _get_vertex(int ID);
VERTEX *resize_array(VERTEX *vertex_array,int new_size);

VERTEX *arr = (VERTEX*)calloc(N, sizeof(VERTEX)); // dynamic allocation and initialization to NULL\0

int main(void)
{
    int vertex_counter = 0 ;
    int starting_size_of_array = sizeof(VERTEX)*N;
}

エラーが表示されます: エラー C2099: 初期化子は定数ではありません

この配列にどこからでもアクセスできるように、VERTEX 配列をグローバルにしたいのです。では、なぜ一定ではないのでしょうか。N は #define の下にあり、VERTEX は .h ファイルに宣言されています。

4

2 に答える 2

3

まず、初期化子は定数ではありません。関数内からグローバルを初期化する必要があります – 例main:

VERTEX *arr;

int main(void)
{
    arr = calloc(N, sizeof *arr);
}

しかし、回避できるのであれば、最初からグローバルを使用すべきではありません (通常はそうです)。コード設計を破壊します。

于 2012-05-27T09:47:57.857 に答える
0

calloc() が返す値は定数ではありません。arr を NULL に初期化してから、プログラムの起動時に初期化できます。

于 2012-05-27T09:47:26.443 に答える