在')'令牌之前预期的主要表达?错误

时间:2015-01-07 19:12:03

标签: c++ c

我搜索并找到其他一些问题。但我无法找到代码中的失败。 也许有人找到了吗? 这是/是c代码。但我不得不在.cpp中重命名它,所以我没有任何错误:

make[1]: Entering directory `/home/numa'
c++ -DHAVE_CONFIG_H -I.  -I/usr/include/libxml2     -g -O2 -MT numabench.o -MD -MP -MF .deps/numabench.Tpo -c -o numabench.o numabench.cpp
numabench.cpp: In function ‘int main(int, char**)’:
numabench.cpp:176:29: error: expected primary-expression before ‘)’ token
numabench.cpp:176:31: error: expected ‘,’ or ‘;’ before ‘{’ token
numabench.cpp:192:1: error: expected ‘}’ at end of input

这是numabench.cpp的方法

有什么遗漏。有人有想法吗?

int main(int argc, char** argv)
{
    setup_t* setup = (setup_t){
          .regions = (memory_regions_t){ .count = 0, .regions = NULL }
    };

    assert(argc == 2);
    parse_setup_file(&setup, argv[1]);
    printf("<?xml version='1.0'?>\n\n");
    printf("<numabench-result>\n\n");
    iterate_params(&setup, 0);
    printf("</numabench-result>\n");
    mainPCM();
    return EXIT_SUCCESS;
}

2 个答案:

答案 0 :(得分:1)

您的代码使用两个C功能,C ++无法识别:复合文字,允许您在初始化和指定之外指定复合数据结构(数组和结构)的值初始化,允许您初始化结构或单个数组条目的各个字段。

我假设setup_t是结构的typedef。你的代码:

setup_t* setup = (setup_t){
      .regions = (memory_regions_t){ .count = 0, .regions = NULL }
};

不在C中编译。编译器要么

setup_t *setup = (setup_t[]) {{ .regions = ... }};

setup_t *setup = &(setup_t) { .regions = ... };

否则,初始化中的类型不兼容,即setup_t *setup_t

您可以通过指定setup_t的实例并使setup成为指向该实例的指针来绕过复合文字:

setup_t data = { .regions = ... };
setup_t *setup = &data;

您可以通过按照C89中的顺序指定字段,或者通过创建初始化为全零的实例,然后将值分配给要初始化的字段来绕过指定的初始化程序。

在您的情况下,所有初始值都为零。初始化至少一个字段可确保所有后续字段也使用零值或空值进行初始化。你可以尝试:

setup_t data = {0};
setup_t *setup = &data;

或者,setup_t的第一个字段是结构,例如regions

setup_t data = {{0}};
setup_t *setup = &data;

我已尝试使用(伪造)结构,它似乎适用于C ++。

答案 1 :(得分:0)

您的代码实际上应该是一组不同的错误,然后是您在上面显示的内容:

[12:33am][wlynch@watermelon /tmp] c++ foo.cc 
foo.cc:3:5: error: unknown type name 'setup_t'
    setup_t* setup = (setup_t){
    ^
foo.cc:3:23: error: use of undeclared identifier 'setup_t'; did you mean
      'setup'?
    setup_t* setup = (setup_t){
                      ^~~~~~~
                      setup
foo.cc:3:14: note: 'setup' declared here
    setup_t* setup = (setup_t){
             ^
foo.cc:7:5: error: use of undeclared identifier 'assert'
    assert(argc == 2);
    ^
foo.cc:9:5: error: use of undeclared identifier 'printf'
    printf("<?xml version='1.0'?>\n\n");
    ^
foo.cc:10:5: error: use of undeclared identifier 'printf'
    printf("<numabench-result>\n\n");
    ^
foo.cc:12:5: error: use of undeclared identifier 'printf'
    printf("</numabench-result>\n");
    ^
foo.cc:13:5: error: use of undeclared identifier 'mainPCM'
    mainPCM();
    ^
foo.cc:14:12: error: use of undeclared identifier 'EXIT_SUCCESS'
    return EXIT_SUCCESS;
           ^
8 errors generated.

值得注意的是,您遗漏了一些#include <...>语句,setup_t的声明以及mainPCM()的声明。