//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…
那么我做错了什么?
答案 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;