在 C/C++ 中,我想从 main.cpp 使用一个现成的变量(mTab),即:
- 在 lib.h 中声明和初始化
- 在 lib.cpp 中实现
我无法完成这项工作:怎么了?似乎 typedef 被忽略了,我不明白为什么?
笔记 :
- 由于 lib.h 的每个用户的 mTab 必须相同,因此我添加了 static 关键字
- 由于必须始终初始化静态变量(以避免意外行为),我在 lib.h 中初始化了 mTab
- 当我在 lib.cpp 中移动 mTab 初始化时:编译为 KO
- 当我在 lib.cpp 中移动 mTab 声明和初始化,并在 main.cpp 中使用“extern”时:编译为 KO
- 获得编译成功的唯一方法是将 mTab 声明和初始化放在 main.cpp 的主范围内......这不是我想要的!(在主范围内编译是可以的。在主范围外,即在包含级别,编译是KO)
感谢帮助,
跳频
~>more *
库文件
#include "lib.h"
void m1 ( unsigned int const iDataSize, int * const iopData ) { return; }
void m2 ( unsigned int const iDataSize, int * const iopData ) { return; }
库文件
#ifndef __lib__
#define __lib__
void m1 ( unsigned int const iDataSize, int * const iopData );
void m2 ( unsigned int const iDataSize, int * const iopData );
typedef void ( *pF ) ( unsigned int const iDataSize, int * const iopData );
static pF mTab[2]; // Ready-to-use variable to be exported
mTab[0] = &m1;
mTab[1] = &m2;
#endif
主文件
#include "lib.h"
#include <stddef.h> // NULL
int main ()
{
(*mTab[0]) ( 0, NULL );
(*mTab[1]) ( 0, NULL );
return 0;
}
生成文件
all:
gcc -I. -c lib.cpp -o lib.o
gcc -I. -c main.cpp -o main.o
gcc -I. lib.o main.o -o main.exe
安慰:
~>make
gcc -I. -c lib.cpp -o lib.o
In file included from lib.cpp:1:0:
lib.h:7:1: error: ‘mTab’ does not name a type
lib.h:8:1: error: ‘mTab’ does not name a type
make: *** [all] Error 1