c++ typedef静态函数指针:未定义符号


//class.h
 typedef double (*ffunct)(double x1, double y1, double x2, double y2);
 class Class {
    public:
        static ffunct myfunct;
        static void setFunct();
        static double doSomething(double x1, double y1, double x2, double y2);
        static void call();
 }
 //class.cpp
 void Class::setFunct(){
     Class::myfunct=Class::doSomething;
 }
 double Class::doSomething(double x1, double y1, double x2, double y2) {
     cout << "Hello World" << endl;
 }
 void Class::call() {
     Class::myfunct(1.0,2.0,3.0,4.0);
 }
 //main.cpp
 …
 Class::setFunct();
 Class::call();
 … 

运行程序得到Undefined symbols for architecture x86_64: "Class::myfunct", referenced from Class::setFunct, Class::call…

我做错了什么?

在您的cpp文件中,您需要多一行:

ffunct Class::myfunct = NULL;

类声明说变量将存在某处,但您从未给它定义。因为它不是每个对象的一部分,所以必须单独定义

你的doSomething原型有一个返回类型double,但是你的实现有一个返回类型 void

static double doSomething(...)
...
void Class::doSomething(...)

修复这个并不能清除所有的错误。正如其他答案所提到的,你还有一些问题。

static ffunct myfunct;是一个声明

您还需要在cpp文件

中定义它

ffunct Class::myfunct;

在.cpp文件顶部添加一行:

ffunct Class::myfunct=NULL;

最新更新