hãy xem xét những tập tin này:Không xác định tham chiếu đến thành viên trỏ hàm tĩnh trong C++, tôi đang làm gì sai?
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);
}
khi biên dịch, tôi có được điều này:
$ 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
nhưng:
$ g++ -c -o pp p.cpp
biên dịch đúng.
Có vấn đề gì với mã? Tôi chỉ không thể tìm ra nơi mà vấn đề là, xin vui lòng giúp đỡ của bạn sẽ được nhiều hơn đánh giá cao.
Cảm ơn.
Bạn có thể xem xét sử dụng [Boost.Function] (http://www.boost.org/doc/libs/1_47_0/doc/html/function.html). –