注册 登录
编程论坛 C++教室

关于定义"string"型的堆栈的问题

ddsxd 发布于 2007-04-25 11:31, 1269 次点击
vc6.0(sp6)
调程序时,出现6个warning,为了确定问题所在,我编译如下源代码:
#include <iostream>
#include <stack>
#include <string>
using namespace std;
void main()
{
stack<string> n;
}
出现6个“warning”,这是什么原因?问题出在哪里?
编译结果:
Compiling...
test.cpp
d:\program files\vc98\include\deque(208) : warning C4786: 'std::reverse_iterator<std::deque<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >:
:const_iterator,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *,int>' : id
entifier was truncated to '255' characters in the debug information
d:\program files\vc98\include\deque(207) : while compiling class-template member function '__thiscall std::deque<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char
>,std::allocator<char> > > >::~std::deque<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >(void)'
d:\program files\vc98\include\deque(208) : warning C4786: 'std::reverse_iterator<std::deque<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >:
:iterator,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *,int>' : identifier was trunc
ated to '255' characters in the debug information
d:\program files\vc98\include\deque(207) : while compiling class-template member function '__thiscall std::deque<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char
>,std::allocator<char> > > >::~std::deque<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >(void)'
warning C4786: 'std::stack<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::deque<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocat
or<char> > > > >::~stack<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::deque<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator
<char> > > > >' : identifier was truncated to '255' characters in the debug information
d:\program files\vc98\include\stack(22) : warning C4786: 'std::stack<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::deque<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_strin
g<char,std::char_traits<char>,std::allocator<char> > > > >::stack<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::deque<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<c
har,std::char_traits<char>,std::allocator<char> > > > >' : identifier was truncated to '255' characters in the debug information
d:\program files\vc98\include\deque(208) : warning C4786: 'std::deque<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::~deque<std::basic_str
ing<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >' : identifier was truncated to '255' characters in the debug information
d:\program files\vc98\include\deque(191) : warning C4786: 'std::deque<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >::deque<std::basic_stri
ng<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >' : identifier was truncated to '255' characters in the debug information

test.obj - 0 error(s), 6 warning(s)

8 回复
#2
aipb20072007-04-25 11:41
不管他,编译器问题哦!

不要写void main()
#3
I喜欢c2007-04-25 12:49
#4
leeco2007-05-16 19:23
很正常,我写有过100多warning的程序,就是string引起的。
#5
xvholly2007-05-16 20:27
以下是引用aipb2007在2007-4-25 11:41:07的发言:

不要写void main()

请教一下,为什么不要这么写?

#6
yushui2007-05-16 21:04

C-Free里面没有这个问题 但有些vc6能编译通过的C-Free就不能通过了 就不清楚怎么回事 

#7
yuyunliuhen2007-05-16 21:41
以下是引用xvholly在2007-5-16 20:27:26的发言:

请教一下,为什么不要这么写?

main() 必须声明为返回 int, 且没有参数或者接受适当类型的两个参数。如果你调用了 exit() 但还是有警告信息, 你可能需要插入一条冗余的 return 语句 (或者使用某种 ``未到达" 指令, 如果有的话)。
把函数声明为 void 并不仅仅关掉了警告信息:它可能导致与调用者(对于 main(), 就是 C 运行期初始代码) 期待的不同的函数调用/返回顺序。

#8
yuyunliuhen2007-05-16 21:50
int main(), int main(void) 或者 int main(int argc, char *argv[]) ( argc 和 argv 的拼写可以随便)。
#9
icedge2007-05-16 23:50
我用vc++2005直接复制楼主的代码没有任何的错误或警告。
1