C ++编译错误:在'('标记之前'预期','或'...'

时间:2012-07-08 00:01:22

标签: c++ compiler-errors syntax-error

非常具体的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

3 个答案:

答案 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);

现在pid2waitpid函数返回的值。 我强烈建议你多做一些阅读 - 无论是书籍还是教程 - 因为你的问题表明你还没有掌握这种语言。我的意思是绝对没有任何冒犯 - 只是想帮助。

答案 2 :(得分:1)

该行

pid_t waitpid(pid_t getpid("apt-get"), int *statusPtr, int WUNTRACED);
对我和C ++编译器来说,

看起来像一个函数声明。看起来您正在尝试声明一个名为waitpid的函数,其返回类型为pid_t,它有三个参数:pid_tint*和{{ 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);