复杂跟踪的编译器错误(未声明的标识符/冲突类型/以前的声明)

时间:2016-12-06 21:43:41

标签: c

我正在尝试解决这个问题,但我遇到了一些错误(在下面的代码中列出):

 file1 = File.new("#{yaml_file_path}/#{yaml_file1}", 'rb')
 file2 = File.new("#{yaml_file_path}/#{yaml_file}", 'rb')

request_body = [["files", file1], ["files", file2]]
RestClient.post url, request_body, request_headers

编译输出:     第16行的错误:      - 每个未声明的标识符仅针对它出现的每个函数报告一次      - 'a'未声明的

#include <stdio.h>

struct foo {
    int num;
    char *word;
    struct foo *ptr;
};

void func2(struct foo *);
void func3(struct foo);

int main() {
    a.num = 100;
    a.word = "secondword";
    func2(&a);
    printf("2 %d %s\n", a.num, a.word);

    a.ptr = &a;
    a.num = 50;
    a.word = "mylastword";
    func3(&a);
    printf("4 %d %s\n", a.num, a.word);
}

void func2(struct foo *a) {
    while (*(a->word) != '\0') {
        putchar(*(a->word));
        a->word++;
    }
    putchar('\n');
    if (a->num % 10 != 0) {
        a->num *= 2;
    }
    a->word--;
    printf("num is %d\n", (*a).num);
}

void func3(struct foo *a) {
    if ((*a).num == a->ptr->num) {
        (*a).num = (*((*a).ptr)).num + 1;
    } else {
        a->num = 200; 
    }
    a->word = "wordsix";
    a->ptr->word = "wordseven";
    printf("7th is %d %s\n", (*a).num, (*((*a).ptr)).word);

1 个答案:

答案 0 :(得分:1)

func3定义为

void func3(struct foo *a)

但之前已声明为

void func3(struct foo);

按值获取结构和指向结构的指针是两个非常不同的东西。您忘记在*之前输入)

请注意,(*a).numa->num完全相同,但可读性更低。使用这种扭曲的语法避免使代码混乱。