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

时间:2013-05-09 23:08:44

标签: c++ pointers 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…

那么我做错了什么?

4 个答案:

答案 0 :(得分:2)

在你的cpp文件中,还需要一行:

ffunct Class::myfunct = NULL;

类声明表示变量将存在于某处但你从未给它定义。由于它不是每个对象的一部分,因此必须单独定义。

答案 1 :(得分:1)

doSomething的原型返回类型为double,但您的实现的返回类型为 void

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

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

答案 2 :(得分:1)

static ffunct myfunct;是声明

您还需要在cpp文件中定义它

ffunct Class::myfunct;

答案 3 :(得分:0)

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

ffunct Class::myfunct=NULL;