c++ - NULL 函数指针,在头文件中声明的函数

标签 c++ xcode osx-lion

我在处理函数指针时遇到问题。我创建了一个以函数指针作为成员的类 Control:

void (*mouseFunction) (Control*, Event*);

成员是 protected ,它有setter和getter:

void (*getMouseFunction()) (Control*,Event*)
{
    return mouseFunction;
}
void setMouseFunction( void (*mouseFunction) (Control*, Event*) )
{
    this->mouseFunction=mouseFunction;
}

问题是,即使在设置了指针之后,它也始终为 NULL。
我在头文件中声明了一个函数:

void mouseFunction (Control* control, Event* event)
{
    std::cout << "Inside Text Field";
}

如果我尝试分配它:

myControlInstance.setMouseFunction(mouseFunction);

如果我使用 getter 获取指针,它是 NULL;如果我尝试执行该函数,我会得到 EXC_BAD_ACCESS:

error: address doesn't contain a section that points to a section in a object file

最佳答案

following cod 正在运行,因此请确保您的方法是公开的,以便可以从对象以外的其他地方访问。

typedef int Event;

class Control
{

public:
    void (*mouseFunction) (Control*, Event*);

    void (*getMouseFunction()) (Control*,Event*)
    {
        return mouseFunction;
    }

    void setMouseFunction( void (*mouseFunction) (Control*, Event*) )
    {
        this->mouseFunction=mouseFunction;
    }
};


void mouseFunction (Control* control, Event* event)
{
    printf ("test");
}


int _tmain(int argc, _TCHAR* argv[])
{

    Control c;
    c.setMouseFunction(mouseFunction);
    Event e = 1;
    c.mouseFunction(&c,&e);
    return 0;
}

关于c++ - NULL 函数指针,在头文件中声明的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12846411/

相关文章:

c++ - 长整数的意外模数行为

c++ - 在函数模板中推导迭代器类型?

OSX 10.10 Yosemite 上的 iOS 6.1 模拟器

ios - Xcode 聊天应用程序,创建动态 View - 有点迷失

python - 在 C++ 中的特定索引之后,是否有一种直接的方法来获取 vector 中的所有项目?

c++ - 在程序本身捕获openCV程序的内存使用

swift - 如何删除 NSTableView 中的一行(Swift)

cocoa - 在 10.3.9 上支持 Xcode 4 框架/库时需要采取的预防措施

xcode - mouseMoved 未调用

c++ - Xcode 4 菜单 "Build"和 "Clean"选项已禁用