2013-05-09 101 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;