C++解决C++ “multiple definition of .. first defined here“问题

Posted 玛丽莲茼蒿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++解决C++ “multiple definition of .. first defined here“问题相关的知识,希望对你有一定的参考价值。

简介: C++ "multiple definition of .. first defined here" 在C++中,有时候需要在不同文件中使用同一个变量。对于这类变量如果处理不当,很容易出现“multiple definition of... first defined here”的错误。

问题一般出在include上!

例如,定义了如下3个文件:global.h, a.cpp, b.cpp 

//global.h:
#ifndef _GLOBAL_H_
#define _GLOBAL_H_

const int a=1;
int b;

#endif
//a.cpp
#include <iostream>
#include <stdlib.h>
#include "global.h"

using namespace std;

void test1()

     cout<<"test1"<<endl;

//b.cpp
#include <iostream>
#include <stdlib.h>
#include "global.h"

using namespace std;

void test2()

    cout<<"test2"<<endl;


void main()

  cout<<"hello world"<<endl;

执行编译命令:

g++ -o main a.cpp b.cpp

提示错误为:

[chris@zz jojo]g++ -o main a.cpp b.cpp
/tmp/ccc7OcsO.o:(.bss+0x0): multiple definition of `b'
/tmp/ccs7q2VA.o:(.bss+0x0):第一次在此定义

出错原因:a.cpp和b.cpp先分别被编译为.o格式的目标文件,两个目标文件再被链接器链接起来,这当中a.cpp和b.cpp分别进行了一次include“global.h”,相当于global.h中的代码重复出现了一次。因为a是const类型,所以重新定义也没事;但是b只是普通变量,重复定义显然不行。

显然,一个解决办法是把b定义为const int类型。或者,定义成static int类型也行。

以上是关于C++解决C++ “multiple definition of .. first defined here“问题的主要内容,如果未能解决你的问题,请参考以下文章

C++ - “函数的多重定义”我们如何解决它?

C++解决C++ “multiple definition of .. first defined here“问题

从 Visual Studio C++ 解决方案调用 Python 脚本

如何解决这个 C++ 向量排序错误?

如何添加 GetCurrentDirectory 文件? C++ [已解决]

关于C++菱形继承问题的解决