重定义的符号的错误

tiancaiak 2009-05-08 02:47:56
typedef std::basic_string< unsigned char > Buffer;///这个定义在一个单独的头文件中

今天在写程序时,在别的cpp文件中还没有什么,只要在某个特定的cpp文件中使用Buffer这个类型,就会报错
1>xgd.lib(xgd.dll) : error LNK2005: "public: unsigned char const * __thiscall std::basic_string<unsigned char,struct std::char_traits<unsigned char>,class std::allocator<unsigned char> >::c_str(void)const " (?c_str@?$basic_string@EU?$char_traits@E@std@@V?$allocator@E@2@@std@@QBEPBEXZ) 已经在 registerMenu_t.obj 中定义

1>xgd.lib(xgd.dll) : error LNK2005: "public: __thiscall std::basic_string<unsigned char,struct std::char_traits<unsigned char>,class std::allocator<unsigned char> >::~basic_string<unsigned char,struct std::char_traits<unsigned char>,class std::allocator<unsigned char> >(void)" (??1?$basic_string@EU?$char_traits@E@std@@V?$allocator@E@2@@std@@QAE@XZ) 已经在 registerMenu_t.obj 中定义

1>..\bin.gb\stard.exe : fatal error LNK1169: 找到一个或多个多重定义的符号

很是奇怪,请问有何解决办法?
...全文
248 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiancaiak 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lingyin55 的回复:]
试试在项目->属性->链接器->命令行->附加选项中加 /force
[/Quote]

啊,上面咧引用错了
tiancaiak 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sagegz 的回复:]
给点例子代码.
[/Quote]

成功了,想起来以前用ftplib的时候也出现过重定义的错误,也是这样解决的,但是为什么加上/force 就好了呢
LeonTown 2009-05-08
  • 打赏
  • 举报
回复
头文件中,extern std::basic_string < unsigned char > Buffer; 进行声明。

在CPP文件中,std::basic_string < unsigned char > Buffer; 进行定义。

在其它文件中,要使用Buffer时,
#include "头文件"
extern std::basic_string < unsigned char > Buffer; 再次声明。
beyond071 2009-05-08
  • 打赏
  • 举报
回复
帮顶...
aaaa3105563 2009-05-08
  • 打赏
  • 举报
回复
帮顶··
Bob0601 2009-05-08
  • 打赏
  • 举报
回复
可能是在某个文件中引用了某个头文件造成了重复编译
whhvc 2009-05-08
  • 打赏
  • 举报
回复
呵呵,弄个完整的例子看看啊,呵呵
liliangbao 2009-05-08
  • 打赏
  • 举报
回复
帮顶~
T技术沙龙 2009-05-08
  • 打赏
  • 举报
回复
求贴完整代码
  • 打赏
  • 举报
回复
#ifndef __mybuffer__
#define __mybuffer__
typedef std::basic_string < unsigned char > Buffer;
#endif
试试看,是不是重复包含,刚才的写快了。
  • 打赏
  • 举报
回复
#ifndef __mybuffer__
#define __mybuffer
typedef std::basic_string < unsigned char > Buffer;
#endif
夹心饼干 2009-05-08
  • 打赏
  • 举报
回复
这让我想起了 单一定义规则

楼主检查下你自己依赖的库里是否有对那个错误函数的定义?是否跟你自己定义的类型一样哦
  • 打赏
  • 举报
回复
Buffer改名后行了没?
jssz103b 2009-05-08
  • 打赏
  • 举报
回复
extern std::basic_string < unsigned char > Buffer
mengde007 2009-05-08
  • 打赏
  • 举报
回复
貌似楼主应该拿点代码出来;无所依据的讨论太空泛了;
taodm 2009-05-08
  • 打赏
  • 举报
回复
楼主是dll导出接口涉及string?
lingyin55 2009-05-08
  • 打赏
  • 举报
回复
只要在某个特定的cpp文件中使用Buffer这个类型,就会报错

另外看看是不是重复包含头文件了,比如上面说的这个头文件,是不是
包含了A.h和B.h,而这两个头文件中又包含了有Buffer定义的头文件。
  • 打赏
  • 举报
回复
typedef std::basic_string < unsigned char > my_Buffer;///

改成这样,还有问题?
yshuise 2009-05-08
  • 打赏
  • 举报
回复
Buffer改个名字。
lingyin55 2009-05-08
  • 打赏
  • 举报
回复
试试在项目->属性->链接器->命令行->附加选项中加 /force

加载更多回复(1)

64,654

社区成员

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

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