以下是我的代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
using namespace std;
int main() {
int cpid=fork();
if(cpid==0) {
printf("%d %d\n",getpid(),getppid());
}
else {
printf("hello");
wait(NULL);
}
}
当我使用以下代码编译它时:
g++ -std=c++11 multiple.cpp -o multiple
It gives me the following
multiple.cpp: In function 'int main()':
multiple.cpp:34:23: error: no matching function for call to 'wait::wait(NULL)'
wait(NULL);
^
multiple.cpp:34:23: note: candidates are:
In file included from /usr/include/stdlib.h:42:0,
from multiple.cpp:4:
/usr/include/bits/waitstatus.h:66:7: note: wait::wait()
union wait
/usr/include/bits/waitstatus.h:66:7: note: candidate expects 0 arguments, 1 provided
/usr/include/bits/waitstatus.h:66:7: note: constexpr wait::wait(const wait&)
/usr/include/bits/waitstatus.h:66:7: note: no known conversion for argument 1 from 'int' to 'const wait&'
/usr/include/bits/waitstatus.h:66:7: note: constexpr wait::wait(wait&&)
/usr/include/bits/waitstatus.h:66:7: note: no known conversion for argument 1 from 'int' to 'wait&&'
但如果我将扩展程序更改为.c
并使用gcc -o multiple multiple.c
则可行。为什么会这样?
答案 0 :(得分:3)
答案 1 :(得分:3)
因为在sys / wait.h中声明了wait,你没有包含它,并且C ++要求所有函数在使用之前都是原型。另一方面,C则没有。
答案 2 :(得分:2)
根据the documentation,您没有包含POSIX wait
函数的标头:
#include <sys/wait.h>
令人惊讶但不可思议的是,C工具链中的等效标准库标题恰好包含了这一点,而您使用的C ++标题库则没有。
更有可能的是,你无意中利用了C中的可怕规则,即你可以在声明之前使用某些函数。