qq_46207392
kushanRyan
采纳率50%
2020-02-12 14:37

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条回答

  • qq_39575645 Kim_小星兴 1年前

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

    修改

    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文件中;

    点赞 1 评论 复制链接分享

相关推荐