我正在做一项学校作业,我需要在其中建立一个线程库。我需要pc
保存给定 Thread 对象run()
函数的地址。当我尝试将成员函数指针强制转换为address_t
(实际上是无符号长整数)时,我收到此错误
../main.cpp: 在函数'void setup(Thread&)'中:
../main.cpp:77:22:错误:从类型“int (Thread::*)()”到类型“address_t {aka unsigned int}”的无效转换</p>
制作:* [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
关于我为什么会收到此错误的任何想法?谢谢