问题描述
我正在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 (将#修改为@)