使用外部unsigned char变量引发LNK2001未解析外部符号错误
使用extern全局变量实现类间字符传递
我在项目里用extern全局变量来实现两个类之间的字符传递,具体做法是在头文件中声明变量,然后在实现文件中直接使用,不用额外声明。下面是我的代码示例:
头文件:test.h
extern unsigned char tempName; extern unsigned char tempValue;
实现文件:test.cpp
void NanoKontrol2::midi_in_proc(UINT wMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { unsigned char ch_msg, data1, data2, data3; switch (wMsg) { case MIM_DATA: // 解析MIDI消息参数 ch_msg = (unsigned char)(dwParam1 & 0xFF); data1 = (unsigned char)((dwParam1 >> 8) & 0xFF); data2 = (unsigned char)((dwParam1 >> 16) & 0xFF); data3 = (unsigned char)((dwParam1 >> 24) & 0xFF); // 直接使用extern变量存储解析得到的数据 tempName = data1; tempValue = data2; break; // 处理其他MIDI消息类型 default: break; } }
关键注意事项
- 由于头文件中已经通过
extern声明了这两个变量,任何包含test.h的源文件都可以直接使用它们,无需重复声明。 - 必须在某个源文件(比如
test.cpp或者专门的全局变量实现文件)中定义这两个变量,代码如下:
否则链接阶段会抛出“未定义标识符”的错误。unsigned char tempName; unsigned char tempValue; - 这种全局变量方式适合简单的跨类数据传递,但项目规模较大时,更推荐用类成员函数、回调函数或者观察者模式等模块化方案,减少代码耦合。
内容的提问来源于stack exchange,提问作者SurfinBird
相关产品推荐
相关产品推荐

