Dhaa_Ryan 2020-02-12 14:37 采纳率: 50%
浏览 935
已采纳

mapoutput.c:(.data+0x0): multiple definition of `p',这个问题怎么解决啊?

我这个蔡鸡初学者在尝试写一个推箱子的程序,但是今天编译的时候遇到了标题所显示的问题.了一下,是'p'这个指针被多次声明,但是我检查了很多遍(很有可能我太菜.......),应该不会有什么被多次声明什么的,但是它确实......,希望大家帮我康康(编译器用的是DEV c++)
附上代码

main,c

#include <stdio.h>
#include "maps.h"
#include "head.h" 
int main() {
    player.a=1;
    player.b=8;
    int x=0,y=0,level=114514,z=0;
    change:scanf_s("%d",&level);
    level--;
    system("cls"); 
    while(z==0){
        mapoutput(x,y,level,map);
        int mov;
        scanf_s("%d",&mov);
        move(mov,level,map,&player);
        system("cls");
        z=judgement(level,map);
        if(z==1){
            z=0;
            goto change;
        }        
    }
    return 0;
}

move.c(太多了,省略一些,如果需要的话我在发出来,实在不行我发源文件)

#include <stdio.h>
#include "head.h" 
#include "maps.h"
void move(int mov,int level,int map[2][6][10],struct post *p){  
..............
}

judgement.c(同上)

#include <stdio.h>
#include "head.h" 
#include "maps.h"
int judgement(int level,int map[2][6][10]){
...........
    return z;           
}

然后是两个头文件
map.h

#ifndef LIST_HEAD2         
#define LIST_HEAD2  
    int map[2][6][10]={

    ........
    };
#endif 

head.h(感觉问题出在这里,但是....)

#ifndef LIST_HEAD1         
#define LIST_HEAD1         
struct post {
    int x;
    int y;
}player;
struct post *p=&player;
void mapoutput(int x,int y,int level,int map[2][6][10]);
void move(int mov,int level,int map[2][6][10],struct post *p);
int judgement(int level,int map[2][6][10]); 
#endif  

然后是运行的报错

图片说明

希望大佬们能帮我看看问题出在哪里了

//救救孩子,秋梨膏

  • 写回答

1条回答 默认 最新

  • Kim_小星兴 2020-02-12 15:33
    关注

    头文件全局变量放声明,不放定义

    修改

    head.h file

    struct post {
        int x;
        int y;
    }player;
    struct post *p=&player;
    //变更为:
    struct post {
        int x;
        int y;
    } ;
    extern struct post *p;
    
    ---------------------------------
    //以下是 head.c中的内容
    #include"head.c"
    struct post player;
    struct post *p=&player;
    .......
    

    变量Map也是如此;把定义和声明分开,在头文件中写 extern int map[2][6][10]; 就可以了,再把你上面的放进c文件中;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序