私は、スレッド ライブラリを構築する必要がある学校の課題に取り組んでいます。pc
指定された Thread オブジェクトのrun()
関数のアドレスを保持する必要があります。address_t
メンバー関数ポインター(実際には unsigned long int) をキャストしようとすると、このエラーが発生します
../main.cpp: 関数 'void setup(Thread&)' 内:
../main.cpp:77:22: エラー: 型 'int (Thread::*)()' から型 'address_t {aka unsigned int}' へのキャストが無効です</p>
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);
}
いくつかの説明:
スレッドは私が書いたクラスで、現在何もしていません。それはint run(void)
その「主な」機能として。address_t
、私が言ったように、typedef unsigned long int
なぜこのエラーが発生するのかについてのアイデアはありますか? ありがとう