error: ‘errno’ was not declared in this scope

来源:互联网 发布:linux命令echo使用简介 编辑:程序博客网 时间:2024/05/01 07:10



转自http://blog.csdn.net/david_xtd/article/details/9151373




问题:

将一个c文件改为cpp文件,其中的perror()改用C++中的std::cerr << strerror(error) << std::endl;来替换。

重新编译文件,出现错误:

[plain] view plaincopyprint?
  1. david@ubuntu:~/wrk/tmp/cpp_src/sysapps$ make  
  2. g++ -g3 -Wall -o0 -c message_recv.cpp -o message_recv.o  
  3. message_recv.cpp: In constructor ‘Message_recv::Message_recv()’:  
  4. message_recv.cpp:59:45: error: ‘errno’ was not declared in this scope  
  5. message_recv.cpp:66:47: error: ‘errno’ was not declared in this scope  
  6. message_recv.cpp: In destructor ‘virtual Message_recv::~Message_recv()’:  
  7. message_recv.cpp:76:47: error: ‘errno’ was not declared in this scope  
  8. message_recv.cpp: In member function ‘virtual void* Message_recv::run()’:  
  9. message_recv.cpp:87:51: error: ‘errno’ was not declared in this scope  
  10. make: *** [message_recv.o] Error 1  
  11. david@ubuntu:~/wrk/tmp/cpp_src/sysapps$  

解决办法:

1. 原来的perror()需要用到头文件<stdio.h>,而strerror()只需要用到头文件<string.h>,

所以,重新编译时,将<stdio.h>替换为<string.h>。

2. errno无疑是一个系统定义的全局变量,不是由用户来声明或定义的。

查到<errno.h>中有这样的宏定义

[plain] view plaincopyprint?
  1. #ifndef errno  
  2. extern int errno;  
  3. #endif  
将头文件<errno.h>包含到程序中,重新编译,编译顺利完成。


问题解决。



原创粉丝点击