gpt4 book ai didi

c - 在 C 中使用 struct 作为类型时类型名称未知?

转载 作者:行者123 更新时间:2023-12-02 09:33:59 26 4
gpt4 key购买 nike

我一生都无法弄清楚为什么我的代码无法编译。我正在使用最新的 gcc 版本进行编译,并且此代码位于 lex 文件的底部(因此在使用 Flex 后将其直接复制到 .c 文件中),这使我 90% 确定此问题是由于我在 C 中做错了一些事情。这是导致问题的代码:

void checkAliases() {
if (aliasHead==0) {
printf("No aliases have been created.");
}
else {
struct AliasNode* current = aliasHead;
printf("Current Aliases: \n");
while (current!=0) {
printAlias(current);
current = current->next;
}
}

struct AliasNode {
struct AliasNode* next;
char* key;
char* value;
};

struct AliasNode* aliasHead = 0;


void printAlias(struct AliasNode* alias) {
char* toPrint = alias->key;
printf(toPrint);
printf(": ");
toPrint = alias->value;
printf(toPrint);
printf("\n");
}

以下是我收到的错误:

error: ‘aliasHead’ undeclared (first use in this function)
if (aliasHead==0) {
^
error: unknown type name ‘AliasNode’
AliasNode* current = aliasHead;

error: request for member ‘next’ in something not a structure or union
current = current->next;
^

error: unknown type name ‘AliasNode’
AliasNode* next;
^

此 C 代码(以及我遗漏的数千行代码)是由此 yacc 文件生成的:

%token CD BYE ALIAS

%%

program: /*empty*/
| program command
;

command:
cd|bye|alias

cd:
CD {printf("Not a valid directory\n"); }
;
bye:
BYE {exit(0); }
;
alias:
ALIAS {
if (aliasHead==0) {
printf("No aliases have been created.");
}
else {
AliasNode* current = aliasHead;
printf("Current Aliases: \n");
while (current!=0) {
printAlias(current);
current = current->next;
}


}
}
;

%%

/*global variables*/

/*linked list to store alias - command pairs */
struct AliasNode {
AliasNode* next;
char* key;
char* value;
};

struct AliasNode* aliasHead = 0;

void printAlias(struct AliasNode* alias) {
char* toPrint = alias->key;
printf(toPrint);
printf(": ");
toPrint = alias->value;
printf(toPrint);
printf("\n");
}

我完全不知道如何修复这些错误。任何帮助,即使只是朝着正确方向插入,我们都非常感激。提前致谢!

编辑:

我更改了 Yacc 文件中的代码,这样现在当我将其通过 Bison 时,我得到的 .c 具有以下内容:

struct AliasNode {
AliasNode* next;
char* key;
char* value;
};

struct AliasNode* aliasHead = 0;

void printAlias(struct AliasNode* alias) {
char* toPrint = alias->key;
printf(toPrint);
printf(": ");
toPrint = alias->value;
printf(toPrint);
printf("\n");
}

void aliasNoPrompt() {
if (aliasHead==0) {
printf("No aliases have been created.");
}
else {
AliasNode* current = aliasHead;
printf("Current Aliases: \n");
while (current!=0) {
printAlias(current);
current = current->next;
}
}

但是,我仍然遇到上述相同的错误。请注意,我在主函数中调用了 aliasNoPrompt()。

最佳答案

将声明放在代码的顶部。 C 要求按从上到下的顺序编写代码,这意味着您应该在使用它之前定义 AliasNode

struct AliasNode {
struct AliasNode* next;
char* key;
char* value;
};

struct AliasNode* aliasHead = 0;

// ... other code here

关于c - 在 C 中使用 struct 作为类型时类型名称未知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29307060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com