【问题标题】:Multiple definition error using header file使用头文件的多重定义错误
【发布时间】:2021-04-28 13:48:58
【问题描述】:

当我尝试在 gcc 中使用头文件编译我的程序时,出现如下错误: c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\37069\AppData\Local \Temp\ccnYwij4.o:file2048.c:(.bss+0x0): 'matrix'的多重定义; C:\Users\37069\AppData\Local\Temp\ccGaOCe4.o:namudarbas2.c:(.bss+0x0):这里首先定义 collect2.exe:错误:ld 返回 1 个退出状态

矩阵只在我的头文件中初始化。

头文件:

#ifndef FILE2048_H
#define FILE2048_H
#define SIZE 4

#ifdef __cplusplus
extern "C" {
#endif

int matrix[SIZE+1][SIZE+1]={0};
int score;
    
void saveToFile(void);
void start(void);
void reset(void);

#ifdef __cplusplus
}
#endif

#endif

其他已定义函数的文件:

#include <stdio.h>
#include <stdlib.h>
#include "file2048.h"

void saveToFile(){
    FILE *load=fopen("2048.txt", "w");
    fprintf(load, "%d %d %d %d\n%d %d %d %d\n%d %d %d %d\n%d %d %d %d\n%d", matrix[0][0], matrix[0][1], matrix[0][2], matrix[0][3], matrix[1][0], matrix[1][1], matrix[1][2], matrix[1][3], matrix[2][0], matrix[2][1], matrix[2][2], matrix[2][3], matrix[3][0], matrix[3][1], matrix[3][2], matrix[3][3], score);
    fclose(load);
}
void start(){
    FILE *load=fopen("2048.txt", "r");
    int i, j;
    for(i=0; i<SIZE; i++){
        for(j=0; j<SIZE; j++){
            fscanf(load, "%d", &matrix[i][j]);
        }
    }
    fscanf(load, "%d", &score);
    fclose(load);
}

还有一些我的主文件,我尝试调用我在另一个文件中创建的函数:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <conio.h>
#include "file2048.h"

#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
#define ESC 57

int over=0;
int last=0;

void display(){
    system("cls");
    int i, j;
    for(i=0; i<SIZE; i++){
        printf("\n\n\n");
        for(j=0; j<SIZE; j++)
        {
            printf("%d\t", matrix[i][j]);
        }
    }
    saveToFile();
    printf("Your score - %d", score);
}

有什么帮助吗?我是头文件新手。

【问题讨论】:

  • 您不应在标题中“定义”(隐式或显式分配空间)变量。
  • 所以应该在main中定义?

标签: c


【解决方案1】:

您的头文件file2048.h 包含变量声明。当您将此文件包含在其他 sorces 文件中时,这会导致变量被多次声明。请查看extern 关键字。

头文件:

#ifndef FILE2048_H
#define FILE2048_H
#define SIZE 4

#ifdef __cplusplus
extern "C" {
#endif

/* - Bad implementation
int matrix[SIZE+1][SIZE+1]={0};
*/

//Better implementation
extern int matrix[SIZE+1][SIZE+1];
//Now define this variable only once, on "main.c" for example

.
.
.

#endif

【讨论】:

  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 2021-11-26
相关资源
最近更新 更多