我希望你们中的一个人可以向我解释为什么编译器要求我在编译单元中重新定义一个静态固定长度数组,尽管我已经在头文件中这样做了。这是一个例子:
MyClass.h:
#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass {
private:
static char myPrecomputeTable[256];
}
#endif
我的类.cpp
#include "MyClass.h"
char MyClass::myPrecomputeTable[256];
如果我删除 MyClass.cpp 中的重新定义,链接器会抱怨 myPrecomputeTable 未定义。语法似乎是多余的。谁能向我解释为什么编译器/链接器需要定义?
编辑:
对不起,我想我不清楚我在困惑什么。我理解声明/定义的概念,更多的是定义我觉得有趣的数组的大小。在定义和声明中,我必须定义看起来多余的大小。
编辑:
我做了更多的挖掘,结果发现这个主题的许多方法都是编译器友好的。编译:
MyClass.h
class MyClass {
static char myPrecomputeTable[256];
};
MyClass.cpp
char MyClass::myPrecomputeTable[256];
编译:
MyClass.h
class MyClass {
static char myPrecomputeTable[];
};
MyClass.cpp
char MyClass::myPrecomputeTable[256];
编译:
MyClass.h
class MyClass {
static char myPrecomputeTable[256];
};
MyClass.cpp
char MyClass::myPrecomputeTable[];
不编译:
MyClass.h
class MyClass {
static char myPrecomputeTable[512];
};
MyClass.cpp
char MyClass::myPrecomputeTable[256];
大小必须在标头或类或两者中定义,但编译器足够聪明,可以停止大小冲突。