【发布时间】:2012-04-21 12:16:05
【问题描述】:
我正在处理一项需要构建线程库的学校作业。
我需要pc 来保存给定线程对象的run() 函数的地址。
当我尝试将成员函数指针强制转换为 address_t(实际上是 unsigned long int)时,我收到此错误
../main.cpp: 在函数'void setup(Thread&)'中:
../main.cpp:77:22: 错误:从类型“int (Thread::*)()”到类型“address_t”的无效转换 {aka unsigned int}'
make: * [main.o] 错误 1
这是我得到错误的函数:
void setup(Thread &thread)
{
address_t sp, pc;
sp = (address_t)stack1 + STACK_SIZE - sizeof(address_t);
int (Thread::*temp)() = &Thread::run;
pc = (address_t) temp; // @@ LINE 77 @@
sigsetjmp(jbuf[0],1);
(jbuf[0]->__jmpbuf)[JB_SP] = translate_address(sp);
(jbuf[0]->__jmpbuf)[JB_PC] = translate_address(pc);
sigemptyset(&jbuf[0]->__saved_mask);
}
一些澄清:
Thread 是我写的一个类,目前什么也没做。它作为int run(void) 作为它的“主要”功能。 address_t,正如我所说,是typedef unsigned long int
关于我为什么会收到此错误的任何想法?谢谢
【问题讨论】:
-
不要以这种方式使用非静态成员函数。使用非成员函数或静态成员函数。没有类实例就不能调用成员函数。