不知是不是namespace 的问题,给100分

conqueror168 2003-01-23 06:03:08
我的程序编译后出现上百行警告,有人能告诉我为什么和怎样解决吗?谢谢

警告如下:
(这只是一小部分)
ld: 0711-224 WARNING: Duplicate symbol: .std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >::deallocate(std::basic_string<char,std::char_traits<char>,std::allocator<char> >*,unsigned long)
ld: 0711-224 WARNING: Duplicate symbol: .std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::capacity() const
ld: 0711-224 WARNING: Duplicate symbol: .std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::max_size() const
ld: 0711-224 WARNING: Duplicate symbol: .std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::_Xlen() const
...全文
49 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunruijia 2003-02-15
  • 打赏
  • 举报
回复
MSDN上的例子前面有注释:
// The debugger can't handle symbols more than 255 characters long.
// STL often creates symbols longer than that.
// When symbols are longer than 255 characters, the warning is disabled.
#pragma warning(disable:4786)

MSDN的解释很明确了:
VC6的调试器不能处理长于255个字符的标识符。
STL往往会自己产生一些长于255字符的标识符,所以会产生警告。
如果要把这个警告禁用可以在程序开始处加上
#pragma warning(disable:4786)
你的标识符确实只有3个字符,但string和vector这两个STL模版会产生很长的标识符,不信可以看看DEBUG版下的反汇编结果。

VC下一个项目默认有两种编译模式,一种是DEBUG一种是RELEASE。
DEBUG版是编译器不作优化的,并加入了调试信息,常用于调试阶段。
Release版是编译器进行优化的,常用于生成最后成品。
可以在Build菜单中选set active configruation来改变编译设置。
AMin2001 2003-02-11
  • 打赏
  • 举报
回复
Release版就不会

或者用vc7
chinajiji 2003-02-11
  • 打赏
  • 举报
回复
这个问题与namespace无关.
chinajiji 2003-02-11
  • 打赏
  • 举报
回复
不是重复定义,是变量名超长,
#pragma warning(disable:4290)
消除警告.
whatapig 2003-02-11
  • 打赏
  • 举报
回复
试试看在每次include 标准库头文件的时候写成这样

#ifndef HEADER_DEFINE
#include <header>
#endif
alan118 2003-02-09
  • 打赏
  • 举报
回复
up
danmao 2003-02-08
  • 打赏
  • 举报
回复
把你的文件结构贴出来

conqueror168 2003-02-08
  • 打赏
  • 举报
回复
还是没有解决啊.
brucegong 2003-01-28
  • 打赏
  • 举报
回复



你包含的头文件里面定义重复了。




merlinran 2003-01-28
  • 打赏
  • 举报
回复
请各位回帖者仔细看看信息内容,此处并非是VC对长标识符的警告。

意义标示得很明显:Duplicate symbol。
你在多个CPP文件中引入了同一个头文件,而头文件没有加上保护
#ifndef SOME_HEADER
#define SOME_HEADER
//...contents
#endif //SOME_HEADER
这样,假如这个头文件中有这样的语句:
typedef basic_string<char> string;
编译器就会在几个不同的地方看到这个声明,就会提醒你。
同样的情况还有类定义。
如果你的头文件中有变量定义,那给出的就不是警告而是错误提示了。比如头文件中有这句:
iostream cout;
那么你就是在多个translation unit中定义变量,而这是被禁止的。

看看你的头文件,看起来是标准库头文件vector,有没有这样的保护。在CPP中多次包含同一个头文件是不可避免的,所以要在头文件中做保护。

conqueror168 2003-01-28
  • 打赏
  • 举报
回复
?
santld 2003-01-24
  • 打赏
  • 举报
回复
有些机子是会出现这种情况的,只要加上
#pragma warning(disable:4290)
将警告隐藏掉就行了,不会影响程序的运行问题!
phoex 2003-01-24
  • 打赏
  • 举报
回复
你是不是在VC中使用了template,(有可能你没有使用,但是你使用了STL)就会出现以上警告!
这是因为template编译展开的问题。
conqueror168 2003-01-24
  • 打赏
  • 举报
回复
两次定义
估计是多次包含头文件.???

说详细一点, 骄傲的石头
termite 2003-01-23
  • 打赏
  • 举报
回复
GZ
earthharp 2003-01-23
  • 打赏
  • 举报
回复
两次定义
估计是多次包含头文件.
Cybergate 2003-01-23
  • 打赏
  • 举报
回复
把源程序帖上来吧.
gieroland 2003-01-23
  • 打赏
  • 举报
回复
似乎是变量或者某个表达式长度超过了255个字符了。
在声明的文件加入
#pragma warning( disable : 4290 )
4290是个例子,表示屏蔽某个警告

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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