这是我正在处理的一段代码中的问题。 基本上,我试图编译我的代码,但不断出现错误:“ Top的多重定义”指向我的stack.c文件(包含函数的文件),其中“ first defined here”指向我的主要对象.c文件:通过阅读其他名称相似的问题,似乎与include相关。这是头文件:

#ifndef STACK_H
#define STACK_H
#define MAXSIZE 10

struct stekas{
int content;
struct stekas *link;
}*top = NULL;

void push(void);
void pop(void);
void display(void);
void help(void);

#endif // STACK_H_INCLUDED

stack.c和main.c文件都具有完全相同的#includes和#defines:

#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
#define MAXSIZE 10

请注意,main.c中没有一次提及“ top”。 同样,如果需要,我可以在需要时发布stack.c文件的整个代码。

===============>>#1 票数:0 已采纳

查看标题中的以下四行:

struct stekas {
    int content;
    struct stekas *link;
}*top = NULL;

这些行可做三件事:

  1. 声明一个称为struct stekas的结构,
  2. 声明一个名为top struct stekas类型的变量,并
  3. 提供变量top的定义。

项目1和2应该在标头中,而项目3应该在C文件中,而不在标头中。

将定义放在标头中的问题在于,每当您包含C文件中的标头时,该C文件都会为标头中定义的内容创建新的定义。 如果包含来自三个C文件的头,则链接器将看到top三个冲突定义,即使您从未在这些C文件的代码中的任何位置引用该变量。

更改标题,如下所示:

struct stekas {
    int content;
    struct stekas *link;
};
extern struct stekas *top;

将此行添加到您的任何C文件中:

struct stekas *top = NULL;

这将解决链接问题。

  ask by Anstane translate from so

未解决问题?本站智能推荐: