.bss + 0x0:“玩家”的多个定义;

问题描述

我正在ray lib中创建一个游戏,并且有一个播放器头文件,其中包含播放器的结构以使事情井井有条。我收到此错误消息,说结构'player'有多个定义。

错误

/usr/bin/ld: main.o:(.bss+0x0): multiple deFinition of `player'; player.o:(.bss+0x0): first defined here collect2: error: ld returned 1 exit status

player.cpp:

#include <raylib.h>
#include "player.h"

void InitPlayer() {

    player.x = 0;
    player.y = 0;

    player.tint = (Color)RAYWHITE;
    player.Frame = 0;
    player.FrameWidth = 16;
    player.MaxFrames = 3;
    player.animation_number = 0;
    player.timer = 0.0f;    

    player.flip = 1;

    //Load Texture2D
    player.playerTexture = LoadTexture("Sprites/PlayerAll.png");

}

void UpdatePlayer() {

player.timer += GetFrameTime();
    
if(player.timer >= 0.2f){
    
        player.timer = 0.0f;
        player.Frame += 1;  
}

if(IsKeyDown(KEY_S)) {
        player.animation_number = 16;   
        player.y += 1;  
    }else if(IsKeyUp(KEY_S)){
        player.animation_number = 0;
    }
    
    
    if(IsKeyDown(KEY_W)){
        player.animation_number = 32;
        player.y -= 1;
    }
    
    if(IsKeyDown(KEY_A)){
        player.animation_number = 48;
        player.x -= 1;'''
    }
        
    if(IsKeyDown(KEY_D)){
        player.animation_number = 48;
        player.x += 1;
        player.flip = -1;
    } else {
        player.flip = 1;
    }
    
    //Clamp frame value
    player.Frame = player.Frame % player.MaxFrames;

}

void DrawPlayer() {
    
DrawTexturePro(player.playerTexture,Rectangle{player.FrameWidth*player.Frame,(float)player.animation_number,(float)player.fliP*16,16},Rectangle{(float)player.x,(float)player.y,16,Vector2{0,0},player.tint);
}

void Unloadplayer() {
    
    UnloadTexture(player.playerTexture);
}

Player.cpp:

#ifndef PLAYER_H
#define PLAYER_H

typedef struct Player{
    
    int x,y;
    Color tint; 

    int Frame;
    int FrameWidth;
    int MaxFrames;
    int animation_number;   
    float timer;    

    int flip;   
    Texture2D playerTexture;
        
}Player;

Player player;


void Unloadplayer();
void InitPlayer();
void UpdatePlayer();
void DrawPlayer();
#endif

主要: main.cpp'文件基本上从'player.h'文件调用函数。我在“ main.cpp”中加入了“ player.h”

仅在需要时提供一些其他信息:我曾尝试在'player'上使用'extern',但这需要我以奇怪的顺序编译cpp文件。编译并链接对象“ player.o”和“ main.o”之后,我将“ player.cpp”更改为在结构全局变量“ player”上具有“ extern”,并且仅编译“ player.cpp”而未编译“ main”。 cpp”并将两个目标文件链接为旧文件“ main.o”。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)