重新定义函数指针

时间:2013-05-27 09:47:55

标签: c++ function-pointers

converter.h位于一个用于许多不同项目的库中。在一个包含mod_converter.h的内容中,我想修改fooToString()。但编译后一个项目给了我一个错误。我正在使用Visual Studio 2008。

converter.h

std::string impl_fooToString(Foo f);
static std::string (*fooToString)(Foo f) = &impl_fooToString; // line 29

mod_converter.h

std::string mod_fooToString(Foo f);
fooToString = &mod_fooToString; // line 10

编译器错误(已翻译):

mod_converter.h(10) : error C4430: Missing type specifier: int assumed
mod_converter.h(10) : error C2373: 'fooToString': redefinition; different type modifier
        converter.h(29) : see declaration of fooToString
mod_converter.h(10) : error C2440: Cannot convert from 'std::string (__cdecl *)(Foo)' to int
    There is no context in which this conversion is possible.

1 个答案:

答案 0 :(得分:0)

@OliCharlesworth想通了。这就是它的样子

mod_converter.h:

std::string mod_fooToString(Foo f);

void setPointers() { // this was missing...
    fooToString = &mod_fooToString;
}