You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用外部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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:05:57