首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

stl 是不是不能在main函数开始之前调用?是否stl本身在main之前就有初始化?该怎么解决

2012-03-13 
stl 是不是不能在main函数开始之前调用?是否stl本身在main之前就有初始化?/*stl是不是不能在main函数开始

stl 是不是不能在main函数开始之前调用?是否stl本身在main之前就有初始化?
/*
  stl   是不是不能在main函数开始之前调用?是否stl本身在main之前就有初始化?
  我在全局对象的构造函数中时候使用   std::list   的时候出错。

  虽然下面的代码可能能正常运行。但是我的代码同下面的代码类似,
  开头也是可以正确运行,之后加了些代码之后,一使用push_back就出错。(记得是内存越界吧)

  后来我使用自已写的list就没问题了。
  我的环境是vc6.0   +   stlport   4.6.2,是这个环境的问题?还是STL普遍的问题?
  或者说还有其它可能?
*/
#include   <iostream>  
#include   <list>
using   namespace   std;  
typedef   void   (*INIT_FUN)(void);
struct   INIT_ADD
{
INIT_ADD(   INIT_FUN   pfun   );
};
struct   GLOBAL_DATA
{
static   list <INIT_FUN>   s_link;
};
list <INIT_FUN>   GLOBAL_DATA::s_link;
INIT_ADD::INIT_ADD(INIT_FUN   pfun)
{
GLOBAL_DATA::s_link.push_back   (pfun);
}


enum   {DATA_COUNT   =   10};
int   g_InitData[DATA_COUNT];
void   InitDataFunction()
{
for   (   int   i   =   0;i   <   DATA_COUNT;   ++i)
{
g_InitData[i]   =   i;
}
}


INIT_ADD   g_Add(   &InitDataFunction   );   //添加初始化函数
int   main(int   argc,   char*   argv[])  
{
//初始化所有初始化函数
list <INIT_FUN> ::iterator   iter;
for   (iter   =   GLOBAL_DATA::s_link.begin();   iter   !=   GLOBAL_DATA::s_link.end();   ++iter)
{
(*iter)();
}


for   (   int   i   =   0;   i   <   DATA_COUNT;   ++i   )
{
cout   < <   g_InitData[i]   < <   endl;
}
return   0;
}



[解决办法]
不应该叫调用吧

在main之前定义stl标准对象是可以的

[解决办法]
不太清楚你的问题
不过我用我的编译器直接编译正常运行了
[解决办法]
vc6还是早点扔了吧。
[解决办法]
不用VC6 用什么好点啊
[解决办法]
VC6对C++的标准支持不够好。用VS.NET 2005吧。
[解决办法]
dev c++
vs 2005

热点排行