0

Linux でコンパイルして実行するプログラムを作成しました。正しく動作しました。その後、QNX への移植を余儀なくされました。

私はやったし、そこでコンパイルしようとしたとき(momenticsを使用したqnx)、不可解なエラーが発生しました:

timer_t * timer = malloc(sizeof(timer_t)); <---- invalid conversion from 'void*' to 'timer_t*'

ここで、(私が推測する)同様のタイプの別のエラーが発生します。

static void signalor(int sig, siginfo_t *si, void *uc)
    timer_t *tidptr;
    tidptr = si->si_value.sival_ptr;<----- invalid conversion from 'void*' to 'timer_t*'

このエラーが発生する理由を知っている人はいますか? またはそれを修正する方法は?

前もって感謝します。

4

2 に答える 2

2

クレジットは@riciが何年も前に答えたように行きますが、これを閉鎖に移すために、次のコードは問題を解決します:

#include <malloc.h>
#include <time.h>
#include <signal.h>

int main() {
    timer_t * timer = (timer_t*)malloc(sizeof(timer_t));

    siginfo_t si = {0};
    timer_t *tidptr;

    tidptr = (timer_t*)si.si_value.sival_ptr;

    return 0;
}

bash-3.2$ ntoarmv7-g++ tst.c -Wall
tst.c: In function 'int main()':
tst.c:7: warning: unused variable 'timer'
bash-3.2$

この問題は、上記のコンパイラと rici の両方で説明されているとおりです。c++ では、互換性のない型のポインターを割り当てることはできません。元のコードは (g++ の代わりに) gcc で問題なくビルドできます。

于 2013-12-03T07:06:39.233 に答える
0

私を正してくれた Philip Kendall に感謝します。:-)

を忘れているようです#include <stdlib.h>

それがなければ、コンパイラはが intを返すと考えmalloc()ますが、これは明らかに と同じ型ではありませんtimer_t *

于 2013-11-20T14:59:10.737 に答える