У меня проблемы с доступом к нестатической функции-члену из указателя на функцию, и я не могу понять мою проблему с синтаксисом. При попытке компиляции, как показано ниже, я получаю сообщение «ошибка: fnc_ptr не объявлен в этой области». и когда, если код изменен, чтобы не получить доступ к функции, он должен указать на его компиляцию и выведет 1 для bar.fn_ptr. Для компиляции я использовал:
g++ -std=c++11 -Wall example.cpp foo.cpp
Структура разделенного файла / пространство имен просто предназначена для эмуляции тех же условий, что и моя первоначальная проблема.
example.cpp
#include "foo.h"
#include <iostream>
int main(int argc, char* argv[]){
pizza::foo bar;
bar.fn_ptr = &pizza::foo::fnc_one;
std::cout << (bar.*fn_ptr)(1) << std::endl;
return 0;
}
foo.cpp
#include <cmath>
#include "foo.h"
namespace pizza{
double foo::fnc_one(double x){
return pow(x,3) - x + 2;
}
}
foo.h
namespace pizza{
class foo{
public:
double (foo::*fn_ptr)(double);
double fnc_one(double);
foo(){
fn_ptr = 0;
}
};
}
Очень похожий вопрос можно найти здесь , с дополнительной ссылкой здесь .