zoukankan      html  css  js  c++  java
  • C++(1):error: invalid conversion from ‘void (*)()’ to ‘void (*)(int)

    void signaldemo_test(void)
    {
        struct itimerval tv, otv;
        signal(SIGALRM, sigFunc);
        //how long to run the first time
        tv.it_value.tv_sec = 3;
        tv.it_value.tv_usec = 0;
        //after the first time, how long to run next time
        tv.it_interval.tv_sec = 5;
        tv.it_interval.tv_usec = 0;
        if (setitimer(ITIMER_REAL, &tv, &otv) != 0)     //定时每隔5s执行一次
        {
            printf("setitimer err %d
    ", errno);
        }
        while(1)
        {
            sleep(2);
            //隔2s打印一遍
            printf("otv: %d, %d, %d, %d
    ", otv.it_value.tv_sec, otv.it_value.tv_usec, otv.it_interval.tv_sec, otv.it_interval.tv_sec);
        }
    }
    
    void sigFunc()
    {
        static int iCnt = 0;    printf("The %d Times: my girl maybe in SZ library 
    ", iCnt++);}
    }
    以上这段代码在用g++编译是会有如下错误:
    /mnt/hgfs/Linux/cleanCup/src/signaldemo.cpp:9: error: invalid conversion from ‘void (*)()’ to ‘void (*)(int)’
    /mnt/hgfs/Linux/cleanCup/src/signaldemo.cpp:9: error: initializing argument 2 of ‘void (* signal(int, void (*)(int)))(int)’

    值得注意的是在gcc编译时不会出错,但是用g++就会有问题,究其原因就是C语言编译器允许隐含性的将一个通用指针转换为任意类型的指针,而C++不允许。
    void sigFunc(int)
    {
        static int iCnt = 0;    printf("The %d Times: my girl maybe in SZ library 
    ", iCnt++);}
    }



  • 相关阅读:
    linux 下共享内存
    linux shmget shmctl
    linux 进程优先级 之设置实时进程 (另一种方式是设置nice值)
    linux .so .a .o 文件
    linux 时间模块 三
    linux 时间模块 二
    linux 时间模块 一
    设计模式之原型模式(php实现)
    设计模式之建造者模式(php实现)
    设计模式之单例模式(php实现)
  • 原文地址:https://www.cnblogs.com/bitter-first-sweet-last/p/4526387.html
Copyright © 2011-2022 走看看