c++ - "Member function must be called or its address taken in function"C++错误

标签 c++ multithreading borland-c++ bcc-compiler

我正在用 C++ 编写一个与线程一起工作的程序。当我尝试创建进程时出现以下错误:Member function must be called or its address taken in function。这是我的代码:

void PCB::createProcess(){
    asm cli
    this->stack = new unsigned[stackSize];

    stack[stackSize-1] = 0x200;             
    stack[stackSize-2] = FP_SEG(wrapper);
    stack[stackSize-3] = FP_OFF(wrapper);
    this->ss = FP_SEG(stack+stackSize-12);
    this->sp = FP_OFF(stack+stackSize-12);

    asm sti
}


void PCB::wrapper(){

    myThread->run();

    myThread->state = TERMINATED;
}

我在这两行中得到了错误:

stack[stackSize-2] = FP_SEG(wrapper);
stack[stackSize-3] = FP_OFF(wrapper);

我什么都试过了。 我试过 (&(wrapper)), PCB::wrapper, &PCB::wrapper 没有任何帮助,它只会给我更多的错误. PCB 是类的名称。

如果有人有想法,请帮忙。

最佳答案

FP_SEGFP_OFF 是分别从指针中提取段选择器和偏移量的宏。二十多年前,我们就是这样在 DOS 和早期版本的 Windows 下操作指针的。除非您的目标是一些您没有提到的时髦系统,否则它们是完全不合适的。

因为 PCB::wrapper 是一个成员函数,指向它的指针是指向成员函数的指针。它不是一个普通函数,因此编译器提示它无法理解代码试图做的事情是正确的。

如今,多线程是通过 std::thread 完成的。您不必进行那种骇人听闻的堆栈操作;只需将指向成员函数的指针和 this 指针传递给 std::thread 的构造函数。

std::thread thr(&PCB::wrapper, this);

关于c++ - "Member function must be called or its address taken in function"C++错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48212419/

相关文章:

Java 线程 - 获取 ServerSocket 输入来更新 Swing

c++ - 使用 bcc32 生成预处理文件

c#-4.0 - SignalR 是 Microsoft 独有的技术吗?

c++ - #nomacros (EP003) 是什么,它还活着吗?

c++ - IDL接口(interface),C++,CORBA,我正在处理 "conflicting return type specified for"和 "invalid abstract return type for member function ‘virtual..."

c++ - 为什么会有注入(inject)的类名?

c++ - 0xC0000005 多线程动画错误

c++ - StartServiceCtrlDispatcher 无法访问 1063 错误

multithreading - Perl 并行 HTTP 请求 - 内存不足

Java多线程查询