为什么会重复定义,要如何解决

[TheChosenOne] 2016-11-30 04:42:25
#ifndef __CONFIGURE_H__
#define __CONFIGURE_H__
#include<iostream>
#include<string>
using namespace::std;
string num_tmp[]={"first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth"};
string num[sizeof(num_tmp)/sizeof(string)];
const char sequence_list_name[] = "log/sequence_list.log";
#endif
在其他两个CPP文件中包含了这个头文件,然后报下面这个错


1>sequence_list.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * num" (?num@@3PAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) 已经在 my_exception.obj 中定义
1>sequence_list.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * num_tmp" (?num_tmp@@3PAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) 已经在 my_exception.obj 中定义
1>E:\syns\data struct\Debug\data struct.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

就是报num_tmp和num重复定义,怎么解决



...全文
206 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2016-11-30
  • 打赏
  • 举报
回复
全局变量应该定义在cpp文件中,在相应头文件中用extern声明该全局变量为外部变量,然后别的cpp文件包含该头文件,就可以使用这个外部全局变量。
Saleayas 2016-11-30
  • 打赏
  • 举报
回复
__declspec( selectany ) 修饰一下变量。 否者你在每一个 .cpp 都定义了这些变量,当然重复了。
paschen 版主 2016-11-30
  • 打赏
  • 举报
回复
这样改:

#ifndef __CONFIGURE_H__
#define __CONFIGURE_H__
#include<iostream>
#include<string>
using namespace::std;
static string num_tmp[]={"first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth"};
static string num[sizeof(num_tmp)/sizeof(string)];
const char sequence_list_name[] = "log/sequence_list.log";
#endif
LB__x 2016-11-30
  • 打赏
  • 举报
回复
变量可以多次声明,但是只能有一次定义。 你这么写两个.cpp文件里面都有string num_tmp[]和string num的定义,肯定会报错啊 在头文件中只声明:extern string num_tmp[];加extern关键字 去任意一个.cpp文件中定义就可以了
[TheChosenOne] 2016-11-30
  • 打赏
  • 举报
回复
引用 1 楼 akirya 的回复:
前面加上 const
这样虽然可以了,但是这不是我要的效果啊
[TheChosenOne] 2016-11-30
  • 打赏
  • 举报
回复
引用 2 楼 philip_puma 的回复:
string num[sizeof(num_tmp)/sizeof(string)]; 确定C++能够直接这样来定义全局变量?把[ ] 里面设置成一个数字试试?
这样是肯定可以的
[TheChosenOne] 2016-11-30
  • 打赏
  • 举报
回复
这样是肯定可以的
philip_puma 2016-11-30
  • 打赏
  • 举报
回复
string num[sizeof(num_tmp)/sizeof(string)]; 确定C++能够直接这样来定义全局变量?把[ ] 里面设置成一个数字试试?
  • 打赏
  • 举报
回复
前面加上 const

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧