0

サイズを指定せずにヘッダーファイルで(グローバル)配列を宣言できることをどこかで読みました。このようなもの:

 // Header
 extern int MyArray[];

 // CPP file
 int MyArray[] = { 1, 4, 16, 512, 8192 }; 

しかし、コンパイルしようとすると、コンパイラ エラーが発生しますinvalid application of 'sizeof' to incomplete type 'double []'

何か不足していますか?前方宣言の場合、コンパイラは配列サイズの指定を強制しますか?

4

3 に答える 3

2

問題は、宣言または定義にありません。問題は、型が不完全であるにもかかわらず (サイズが省略されているため)sizeofに適用しようとしていることです。MyArray

コンパニオン変数を使用してサイズを格納するという、ちょっとしたハックな方法があります。

// Header
extern int MyArray[];
extern size_t MyArraySize;

// CPP file
int MyArray[] = { 1, 4, 16, 512, 8192 }; 
size_t MyArraySize = sizeof(MyArray);

MyArraySizeのサイズを決定するために、他の翻訳単位で使用できるようになりましたMyArray

ただし、この方法を使用する代わりに、配列のサイズを指定する (またはグローバル変数をまとめて使用しない) ことをお勧めします。

于 2013-03-28T11:22:24.857 に答える
0

配列のサイズを指定しない場合は、現在のサイズを個別に追跡する必要があり、コンパイラはコンパイル時にこのサイズを認識しないため、使用できませんsizeof():

.h:

extern int MyArray[];
extern size_t MyArrayLen;

.cpp:

int MyArray[] = { 1, 4, 16, 512, 8192 };
size_t MyArrayLen = 5;
于 2013-03-28T11:23:06.380 に答える
0

みんなありがとう...それは本当に私のせいでした. への呼び出しがあったコードの別の部分からエラーが発生したことに気づきませんでしたsizeof(myArray).

于 2013-03-30T11:34:36.160 に答える