//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;