问题:
将一个c文件改为cpp文件,其中的perror()改用C++中的std::cerr << strerror(error) << std::endl;来替换。
重新编译文件,出现错误:
david@ubuntu:~/wrk/tmp/cpp_src/sysapps$ make g++ -g3 -Wall -o0 -c message_recv.cpp -o message_recv.o message_recv.cpp: In constructor ‘Message_recv::Message_recv()’: message_recv.cpp:59:45: error: ‘errno’ was not declared in this scope message_recv.cpp:66:47: error: ‘errno’ was not declared in this scope message_recv.cpp: In destructor ‘virtual Message_recv::~Message_recv()’: message_recv.cpp:76:47: error: ‘errno’ was not declared in this scope message_recv.cpp: In member function ‘virtual void* Message_recv::run()’: message_recv.cpp:87:51: error: ‘errno’ was not declared in this scope make: *** [message_recv.o] Error 1 david@ubuntu:~/wrk/tmp/cpp_src/sysapps$
解决办法:
1. 原来的perror()需要用到头文件<stdio.h>,而strerror()只需要用到头文件<string.h>,
所以,重新编译时,将<stdio.h>替换为<string.h>。
2. errno无疑是一个系统定义的全局变量,不是由用户来声明或定义的。
查到<errno.h>中有这样的宏定义
#ifndef errno extern int errno; #endif将头文件<errno.h>包含到程序中,重新编译,编译顺利完成。
问题解决。