4

我正在尝试在我的 C++ 代码中使用wait()和。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函数的标头。但是,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 回答
0

同意“bash.d”。如果您自己编写了“waitstatus.h”并且想要使用它,则需要将其包装在命名空间中。

如果没有,您可能想尝试包含 sys/wait.h 而不是 waitstatus.h

于 2013-04-17T10:05:34.563 回答