4

C++ コードでwait()andを使用しようとしています。fork()しかし、コンパイル段階で次のエラーが発生します

../test/my_test.cpp: In member function 'void MYClass::myMethod()':
../test/my_test.cpp:98: error: no matching function for call to 'wait::wait(int*)'
/data/backfire/staging_dir/toolchain-i386_gcc-4.1.2_uClibc-0.9.30.1/lib/gcc/i486-openwrt-linux-uclibc/4.1.2/../../../../i486-openwrt-linux-uclibc/sys-include/bits/waitstatus.h:68: note: candidates are: wait::wait()
/data/backfire/staging_dir/toolchain-i386_gcc-4.1.2_uClibc-0.9.30.1/lib/gcc/i486-openwrt-linux-uclibc/4.1.2/../../../../i486-openwrt-linux-uclibc/sys-include/bits/waitstatus.h:68: note:                 wait::wait(const wait&)

コード:

void MYClass::myMethod()
{
    pid_t pid;
    int status;
    if ((pid = fork()) < 0) {
       printf("error fork\n");
       return;
    }
    if (pid == 0) {
        /* cild*/
        ......
    }
    /*parent*/
    while (wait(&status) != pid);
}

エラーを修正するには?

4

3 に答える 3

10

waitこのエラーは、(予想どおり) という関数を呼び出そうとしたのではなく、ポインターから変換して、という型のオブジェクトを作成しようとしたことを示していますwait

wait問題は、関数を宣言するヘッダーが含まれていないことです。ただし、別のヘッダーに defined という型があるwaitため、関数宣言がないと、コンパイラはそれを意味すると見なします。

のマンページからの解決策wait(2)

#include <sys/types.h>
#include <sys/wait.h>
于 2013-04-17T10:06:02.553 に答える
0

コンストラクターが期待されているように見えます...試してください

 while (::wait(&status) != pid);

scope-operator を使用してwait-function を呼び出します。これで問題が解決しない場合は、名前の衝突があり、クラスに個別の名前空間を作成する必要があります。

namespace mywait{

  class MyClass {

  };

}
于 2013-04-17T09:44:37.207 に答える