これらのファイルをご検討ください。C++の静的関数ポインタメンバーへの未定義の参照は何ですか?
のpH:
#ifndef _p_h_
#define _p_h_
class p{
public:
static void set_func(int(*)());
private:
static int (*sf)();
};
#endif
p.cpp:
#include "p.h"
#include <cstdio>
int (p::*sf)() = NULL; //defining the function pointer
void p::set_func(int(*f)()){
sf = f;
}
はmain.cppに:
#include "p.h"
#include <iostream>
int function_x(){
std::cout << "I'm function_x()" << std::endl;
return 1234;
}
int main(){
p::set_func(function_x);
}
コンパイルし、私はこれを取得:
$ g++ -o pp main.cpp p.cpp
/tmp/ccIs0M7r.o:p.cpp:(.text+0x7): undefined reference to `p::sf'
collect2: ld returned 1 exit status
しかし:
$ g++ -c -o pp p.cpp
は右コンパイルします。
コードに問題がありますか?私は問題がどこにあるのか分かりません。あなたの助けが高く評価されますように。
ありがとうございました。 p::sf
を定義するに
[Boost.Function](http://www.boost.org/doc/libs/1_47_0/doc/html/function.html)を使用してください。 –