在c中未定义引用静态函数指针成员,我做错了什么?

前端之家收集整理的这篇文章主要介绍了在c中未定义引用静态函数指针成员,我做错了什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
请考虑以下文件

p.h:

#ifndef _p_h_
#define _p_h_

class p{
public:    
    static void set_func(int(*)());

private:
    static int (*sf)();

};
#endif

p.cpp:

#include "p.h"
#include <cstdio>

int (p::*sf)() = NULL;    //defining the function pointer

void p::set_func(int(*f)()){
    sf = f;
}

main.cpp中:

#include "p.h"
#include <iostream>

int function_x(){
        std::cout << "I'm function_x()" << std::endl;
        return 1234;
}

int main(){
        p::set_func(function_x);
}

在编译时,我得到这个:

$g++ -o pp main.cpp p.cpp
/tmp/ccIs0M7r.o:p.cpp:(.text+0x7): undefined reference to `p::sf'
collect2: ld returned 1 exit status

但:

$g++ -c -o pp p.cpp

编译正确.

代码有什么问题?我只是找不到问题出在哪里,请你的帮助不仅仅是赞赏.

谢谢.

解决方法

你定义p :: sf的尝试是不正确的 – 你的是一个名为sf的全局变量的定义,其类型为int(p :: *)(),即指向成员函数的指针.因此p :: sf保持未定义,因此链接错误.

试试这个:

int (*p::sf)() = 0;

// or,typedef int (*p_sf_t)();
p_sf_t p::sf = 0;

猜你在找的C&C++相关文章