ubuntu下面C++编译的问题:atexit不是std的成员

liufenglai 2009-05-05 01:12:07
我们项目中有一个用qt做的GUI程序,在ubuntu下面我碰到了如下的编译错误:
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_NO_KEYWORDS -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/opt/qtsdk-2009.02/qt/mkspecs/linux-g++ -I. -I/opt/qtsdk-2009.02/qt/include/QtCore -I/opt/qtsdk-2009.02/qt/include/QtGui -I/opt/qtsdk-2009.02/qt/include/QtSql -I/opt/qtsdk-2009.02/qt/include -I. -I. -I. -o main.o main.C
In file included from OptionRegister.h:15,
from InputDialog.h:16,
from main.C:35:
Register.h: In static member function ‘static QChem::Register<K, T>& QChem::Register<K, T>::instance()’:
Register.h:28: 错误: ‘atexit’不是‘std’的成员
make: *** [main.o] 错误 1

其中,Register.h的相关代码是这样的:
#include <map>


namespace QChem {

template <class K, class T>
class Register {

public:
static Register& instance() {
if (s_instance == 0) {
s_instance = new Register();
::std::atexit(Register::destroy);
}
return *s_instance;
}
其中28行就是指 ::std::atexit(Register::destroy)这一行。

请教大家,怎样修正这个编译错误?非常感谢!!!
...全文
166 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liufenglai 2009-05-05
  • 打赏
  • 举报
回复
ok。我大概能够明白楼上的意思了。
直接调用C里面的函数。
刚刚我改了一下,现在没有问题了。非常感谢!!
  • 打赏
  • 举报
回复
#include<stdlib.h>

然后把std这个名字空间去掉。你试下就知道了。
liufenglai 2009-05-05
  • 打赏
  • 举报
回复
非常感谢楼上的回答。
我对C++基本不了解,因此不能够贸然改动他们的程序(在我们的项目组里,我只是负责linux平台的相关事宜,以及scientific support工作)。但是我们这边程序员说,他可以在suse上面成功编译这段程序。所以我想,可能是缺少了相应的关于std的库。
  • 打赏
  • 举报
回复
atexit,这个是linux有的一个调用。

我不知道std有没有。

你看这里
http://blog.csdn.net/huhaihong/archive/2008/03/16/2189709.aspx

wshcdr 2009-05-05
  • 打赏
  • 举报
回复
UP

24,855

社区成员

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

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