调用一个使用对象成员而不给对象的函数

时间:2010-05-05 17:39:15

标签: c++

void CVisualStudioDemoDoc::updateLine(void)
{
int newln = GetLineNumber(p_buf);
reinterpret_cast<CVisualStudioDemoView *>(m_viewList.GetHead())->SetCurrentLineNumber(ln, newln);
ln = newln;
}

我想从代码的另一部分调用此函数,而不必给出对象指针和包含头文件。

我想把它称为普通的无效函数。

    if (changementLigne == true) {
        currentLine = prog;
        // TODO : appeler le callback de X2
        updateLine();
        Suspendre();
        changementLigne = false;
    }

我不知道是否可能,因为CVisualStudioDemoDoc类是一个MFC类,我找不到可以使用的指针。

1 个答案:

答案 0 :(得分:3)

你不能这样做。

如果成员函数引用成员变量,则需要有效的this指针。如果您不包含声明该函数的头文件,则编译器无法知道您所指的是什么。除非你说出来,否则怎么知道updateLine()是一个函数呢?

如果你试图从C代码调用C ++成员函数,那么你需要编写一个包装器。类似于以下内容(未经测试):

.h文件:

extern "C" {
CallUpdateLine(void* data);
}

.cpp文件:

extern "C" {
  CallUpdateLine(void* data)
  {
    CVisualStudioDemoDoc* ptr = static_cast<CVisualStudioDemoDoc*>(data);
    ptr->updateLine();
  }
}

还有其他questions也可能有用。