当前位置: 技术问答>linux和unix
书上的范例C程序,我改造成C++程序怎么编译不通过?请指点!
来源: 互联网 发布时间:2015-01-14
本文导语: 源C程序,编译没有问题: #include #include #include void ouch(int sig) { printf("OUCH! - I got signal %dn",sig); } int main() { struct sigaction act; act.sa_handler=ouch; sigemptyset(&act.sa_mask); act.sa_flags=0; sigaction(SIGINT,&act,0); while(1) { ...
源C程序,编译没有问题:
#include
#include
#include
void ouch(int sig)
{
printf("OUCH! - I got signal %dn",sig);
}
int main()
{
struct sigaction act;
act.sa_handler=ouch;
sigemptyset(&act.sa_mask);
act.sa_flags=0;
sigaction(SIGINT,&act,0);
while(1)
{
printf("hello wordn");
sleep(1);
}
}
我改造的C++程序testsignal.h和testsignal.cpp
testsignal.h:
#include
#include
#include
class test
{
public:
void ouch(int sig);
};
testsignal.cpp:
#include "testsignal.h"
main()
{
test test1;
struct sigaction act;
act.sa_handler=test1.ouch; ----这里编译时有问题,不解
sigemptyset(&act.sa_mask);
act.sa_flags=0;
sigaction(SIGINT,&act,0);
while(1)
{
printf("hello wordn");
sleep(1);
}
}
void test::ouch(int sig)
{
printf("OUCH! - I got signal %dn",sig);
}
编译g++ -c testsignal.cpp
报错:
testsignal.cpp:In function 'int main()';
testsignal.cpp:7:no matches converting function 'ouch' to type 'void (*) (int)'
testsignal.h:7:candidates are: void test::ouch(int)
请大家帮忙!!
#include
#include
#include
void ouch(int sig)
{
printf("OUCH! - I got signal %dn",sig);
}
int main()
{
struct sigaction act;
act.sa_handler=ouch;
sigemptyset(&act.sa_mask);
act.sa_flags=0;
sigaction(SIGINT,&act,0);
while(1)
{
printf("hello wordn");
sleep(1);
}
}
我改造的C++程序testsignal.h和testsignal.cpp
testsignal.h:
#include
#include
#include
class test
{
public:
void ouch(int sig);
};
testsignal.cpp:
#include "testsignal.h"
main()
{
test test1;
struct sigaction act;
act.sa_handler=test1.ouch; ----这里编译时有问题,不解
sigemptyset(&act.sa_mask);
act.sa_flags=0;
sigaction(SIGINT,&act,0);
while(1)
{
printf("hello wordn");
sleep(1);
}
}
void test::ouch(int sig)
{
printf("OUCH! - I got signal %dn",sig);
}
编译g++ -c testsignal.cpp
报错:
testsignal.cpp:In function 'int main()';
testsignal.cpp:7:no matches converting function 'ouch' to type 'void (*) (int)'
testsignal.h:7:candidates are: void test::ouch(int)
请大家帮忙!!
|
上面这位 这句话当然有意义 看看ipc吧 这个问题我猜是和c/c++编译方式不同有关系 至少windows下面编译的类传递函数的时候是虚表加偏移的 直接想传地址有问题
你必须强行的表明这是取得函数的地址才行啊 用函数指或是取地址吧
不过这叫c++程序吗?毕竟c++不提倡使用地址访问的 如果想写一个c++来代替这段代码 你需要封装sigaction act才比较像样吧
你必须强行的表明这是取得函数的地址才行啊 用函数指或是取地址吧
不过这叫c++程序吗?毕竟c++不提倡使用地址访问的 如果想写一个c++来代替这段代码 你需要封装sigaction act才比较像样吧
|
C++是强类型检查,不允许这样的转化,C是弱类型的,对这个问题给warning.