2

私はvariables.hという名前のヘッダーファイルでいくつかの外部変数を次のように定義しました:

#ifndef VARIABLES_H
#define VARIABLES_H


extern int var1;
extern int var2;

#endif

次に、それをソースファイルに追加します。

コンパイラは私に次のように警告します:

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘var1’

これはすべての変数で発生し、最後の変数で終了します。

何が問題ですか?

エラーは、すべての変数のvariables.hに表示されます。

file.h:

#ifndef FILE_H
#define FILE_H

void do_sth(void);  

void do_sth_else(void);

#endif

file.c:

#include "variables.h"

/* Quit */
void do_sth(void) { 
/* do sth */
}

void do_sth_else(void) { 
/* do sth else */
}

それで全部です。エラーは次のとおりです。

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘var1’

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘var2’
4

1 に答える 1

1

投稿したヘッダーの明らかな問題の 1 つは、スコープ内にない可能性のある型の変数を宣言していることです。たとえば、次のように宣言します。

extern GtkLabel *status_label;

しかし、ありません

#include <gtk/gtk.h>

ファイルの上部にあります。variables.hfromをインクルードすると、が の前にインクルードさmain.cれるので問題ありません。は不明なタイプであるため、他のすべてのファイルでは問題が発生します。<gtk/gtk.h>variables.hGtkLabel

この問題を修正するには、ファイル<gtk/gtk.h>の先頭に を含めvariables.hます。次に、 とを含むvariables.hシンプルなプロジェクトを作成します。main.cvariables.h

main.c

#include "variables.h"

int main() {
    return 0;
}

main.cこの単純なコンパイルが完了するまで、不足しているヘッダーを追加し続けます。variables.h次に、実際のプロジェクトに追加すると、問題は解決するはずです。

于 2012-06-25T19:51:06.177 に答える