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

全局int变量引发One or more multiply defined symbols错误求助

问题分析与解决

你的代码示例

main.cpp

int age;

int main(int argc, char* argv[])
{
    printf("%d", age);
    return 0;
}

testing.cpp

// global variable
int age = 20;

错误原因

你遇到的「one or more multiply defined symbols found」错误,核心是全局变量的定义冲突:

  • 在main.cpp中,int age;属于C++标准中的「暂定定义(tentative definition)」,编译器会将其视为一个弱定义(会分配内存),而非单纯的声明。
  • 在testing.cpp中,int age = 20;是一个显式定义(明确初始化变量并分配内存)。
  • 链接阶段,链接器发现两个编译单元中都存在age的定义,因此抛出多重定义错误。

为什么char类型时看似正常?

你说char类型可以正常运行,大概率是测试char时,main.cpp里写的是extern char age;(这是声明,不分配内存,仅告知编译器变量在其他地方定义),而非char age;(同样是暂定定义)。如果用和int完全相同的写法(char age;在main.cpp,char age = 'x';在testing.cpp),同样会触发多重定义错误。

解决方法

将main.cpp中的int age;修改为声明,用extern关键字明确告知编译器变量的定义在其他编译单元:

extern int age; // 仅声明,不定义

int main(int argc, char* argv[])
{
    printf("%d", age);
    return 0;
}

这样链接时,链接器会找到testing.cpp中age的唯一定义,不会再报错。

内容的提问来源于stack exchange,提问作者emir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:02:13