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 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的