非常具体的C ++编译语法错误,我无法找到解决方案:我是C ++的新手并且读取了作为参数传递的函数。编译错误对我没有意义,因为我已经反复阅读了代码。请帮忙。
编辑:我删除了waitpid(pid_t,int,int)并且只使用了system()命令。感谢大家的帮助。
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main(){
/* puts apt-get purge text into ~$ purge_e_output */
system("sudo apt-get purge enlightenment > purge_e_output.txt");
system("echo **Pid of apt-get**");
system("pidof apt-get");
try{
pid_t waitpid(pid_t getpid("apt-get"), int *statusPtr, int WUNTRACED);
} catch(...){}
system("echo **REMOVING ENGLIGHTENMENT**");
system("sudo apt-get purge enlightenment");
system("pidof apt-get");
try{
pid_t waitpid(pid_t getpid("apt-get"), int *statusPtr, int WUNTRACED);
} catch(...){}
/* puts apt-get autoremove text into ~$ autoremove_e_output */
system("sudo apt-get autoremove > autoremove_e_output.txt");
system("echo **Pid of apt-get**");
system("pidof apt-get");
try{
pid_t waitpid(pid_t getpid("apt-get"), int *statusPtr, int WUNTRACED);
} catch(...){}
system("echo **REMOVING E DATA**");
system("sudo apt-get autoremove");
system("echo **Pid of apt-get**");
system("pidof apt-get");
try{
pid_t waitpid(pid_t getpid("apt-get"), int *statusPtr, int WUNTRACED);
} catch(...){}
/* puts apt-get autoclean text into ~$ autoclean_e_output */
system("sudo apt-get autoclean > autoclean_e_output.txt");
system("echo **Pid of apt-get**");
system("pidof apt-get");
try{
pid_t waitpid(pid_t getpid("apt-get"), int *statusPtr, int WUNTRACED);
} catch(...){}
system("echo **CLEANING**");
system("sudo apt-get autoclean");
system("echo **Pid of apt-get**");
system("pidof apt-get");
try{
pid_t waitpid(pid_t getpid("apt-get"), int *statusPtr, int WUNTRACED);
} catch(...){}
/* reinstall englightenment */
system("echo **REINSTALLING**");
system("sudo apt-get install enlightenment");
system("echo **Pid of apt-get**");
system("pidof apt-get");
try{
pid_t waitpid(pid_t getpid("apt-get"), int *statusPtr, int WUNTRACED);
} catch(...){}
/* logs */
system("echo && echo Logs for wtf just happened:");
system("echo && echo ~$ purge_e_output.txt && echo ~$ autoremove_e_output.txt && echo ~$ autoclean_e_output.txt");
}
编译错误:
~$ g++ JIC.cpp -o JIC
JIC.cpp: In function ‘int main()’:
JIC.cpp:12: error: expected ‘,’ or ‘...’ before ‘(’ token
JIC.cpp:18: error: expected ‘,’ or ‘...’ before ‘(’ token
JIC.cpp:26: error: expected ‘,’ or ‘...’ before ‘(’ token
JIC.cpp:34: error: expected ‘,’ or ‘...’ before ‘(’ token
JIC.cpp:42: error: expected ‘,’ or ‘...’ before ‘(’ token
JIC.cpp:49: error: expected ‘,’ or ‘...’ before ‘(’ token
JIC.cpp:58: error: expected ‘,’ or ‘...’ before ‘(’ token
答案 0 :(得分:2)
这在那个地方没有意义:
pid_t waitpid(pid_t getpid("apt-get"), int *statusPtr, int WUNTRACED);
答案 1 :(得分:1)
你不能这样做
pid_t waitpid(pid_t getpid("apt-get"), int *statusPtr, int WUNTRACED);
相反,您需要实际创建要传递给此函数的变量的实例。例如
pid_t pid = getpid();
int status = // set to some value that you choose
然后你可以像这样调用你的函数
pid_t pid2 = waitpid(pid, &status, WUNTRACED);
现在pid2
是waitpid
函数返回的值。
我强烈建议你多做一些阅读 - 无论是书籍还是教程 - 因为你的问题表明你还没有掌握这种语言。我的意思是绝对没有任何冒犯 - 只是想帮助。
答案 2 :(得分:1)
该行
pid_t waitpid(pid_t getpid("apt-get"), int *statusPtr, int WUNTRACED);
对我和C ++编译器来说,看起来像一个函数声明。看起来您正在尝试声明一个名为waitpid
的函数,其返回类型为pid_t
,它有三个参数:pid_t
,int*
和{{ 1}}。但是,参数的名称不能是int
,因此除了这是函数声明文件中的错误位置之外,您不能将其解释为函数声明,因为它尝试使用函数调用作为参数的名称。
相反,如果您尝试将此行解释为对名为getpid("apt-get")
的函数(已定义的函数)的函数调用,waitpid
作为参数有意义,因为它意味着您要传递结果getpid("apt-get")
函数作为getpid
函数的第一个参数。但是,该行的其余部分是函数调用的不正确语法,因为函数调用的参数类型不应该内联指定 - 您应该传递已经定义为变量或函数的参数。对waitpid
函数的语法正确调用可能如下所示:
waitpid
以下定义可能出现在其他地方:
int* statusPtr = ...;
int WUNTRACED = ...;
pid_t myPid = waitpid(getpid("apt-get"), &statusPtr, WUNTRACED);