2013-05-09 95 views
0
//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…C++的typedef静态函数指针:未定义的符号

所以PROGRAMM结果我究竟做错了什么?

回答

2

在你的CPP文件,你还需要一个行:

ffunct Class::myfunct = NULL; 

类的声明说,该变量将存在地方但你从来没有给它一个定义。由于它不是每个对象的一部分,因此必须单独定义。

0

增加您的.cpp文件的顶部一行:

ffunct Class::myfunct=NULL; 
1

你的doSomething原型的double返回类型,但它们的实现有void返回类型。

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

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

1

static ffunct myfunct;是一个声明

你需要它的定义也是在cpp文件

ffunct Class::myfunct;