Поэтому, когда я пытаюсь запустить свой проект, я получаю эту ошибку.
Код: Выделить всё
> "C:\Program Files\JetBrains\CLion 2022.2\bin\cmake\win\bin\cmake.exe" --build C:\Users\Dominus\CLionProjects\porject2121\cmake-build-debug --target porject2121 -j 9
[1/4] Building CXX object CMakeFiles/porject2121.dir/Game/Player/Textures.cpp.obj
[2/4] Building CXX object CMakeFiles/porject2121.dir/main.cpp.obj
[3/4] Building CXX object CMakeFiles/porject2121.dir/Game/Game.cpp.obj
[4/4] Linking CXX executable porject2121.exe
FAILED: porject2121.exe
cmd.exe /C "cd . && C:\PROGRA~1\JETBRA~1\CLION2~1.2\bin\mingw\bin\G__~1.EXE -g -static -static-libgcc CMakeFiles/porject2121.dir/main.cpp.obj CMakeFiles/porject2121.dir/Game/Game.cpp.obj CMakeFiles/porject2121.dir/Game/Engine/PlayerController.cpp.obj CMakeFiles/porject2121.dir/Game/Engine/Character.cpp.obj CMakeFiles/porject2121.dir/Game/Player/Player.cpp.obj CMakeFiles/porject2121.dir/Game/Player/Textures.cpp.obj -o porject2121.exe -Wl,--out-implib,libporject2121.dll.a -Wl,--major-image-version,0,--minor-image-version,0 ../SFML/lib/libsfml-graphics-s-d.a ../SFML/lib/libsfml-window-s-d.a ../SFML/lib/libsfml-system-s-d.a -lOpenGL32 -lwinmm -lgdi32 ../SFML/lib/libfreetype.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
C:\Program Files\JetBrains\CLion 2022.2\bin\mingw\bin/ld.exe: CMakeFiles/porject2121.dir/Game/Game.cpp.obj: in function `std::__cxx11::basic_string::_M_is_local() const':
C:/PROGRA~1/JETBRA~1/CLION2~1.2/bin/mingw/lib/gcc/x86_64-w64-mingw32/11.2.0/include/c++/bits/basic_string.h:230: multiple definition of `Textures::player_texture'; CMakeFiles/porject2121.dir/main.cpp.obj:main.cpp:(.bss+0x0): first defined here
C:\Program Files\JetBrains\CLion 2022.2\bin\mingw\bin/ld.exe: CMakeFiles/porject2121.dir/Game/Player/Textures.cpp.obj:Textures.cpp:(.bss+0x0): multiple definition of `Textures::player_texture'; CMakeFiles/porject2121.dir/main.cpp.obj:main.cpp:(.bss+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
main.cpp:
Код: Выделить всё
#include "Game.h"
int main()
{
Game game;
Textures::setTextures();
Player* player = new Player(Textures::player_texture, sf::Vector2f(PLAYER_START_X,PLAYER_START_Y),PLAYER_START_HP);
sf::Clock clock;
while(game.Runing()){
float time = clock.getElapsedTime().asMicroseconds();
clock.restart();
time/=300;
game.Update();
player->Update(time);
game.Render(player);
}
delete player;
return 0;
}
Код: Выделить всё
#ifndef PORJECT2121_GAME_H
#define PORJECT2121_GAME_H
#include "Engine/Constants.h"
#include "Player/Player.h"
#include "Player/Textures.h"
class Game {
private:
sf::RenderWindow* m_window;
sf::VideoMode m_videomode;
sf::Event m_ev;
void initVariables();
void initWindow();
public:
Game();
~Game();
const bool Runing() const;
void pollEvents();
void Update();
void Render(Player* player);
};
#endif //PORJECT2121_GAME_H
Код: Выделить всё
#ifndef PORJECT2121_TEXTURES_H
#define PORJECT2121_TEXTURES_H
#include
namespace Textures{
sf::Texture player_texture;
static void setTextures();
}
#endif //PORJECT2121_TEXTURES_H
Код: Выделить всё
#ifndef PORJECT2121_PLAYER_H
#define PORJECT2121_PLAYER_H
#include "Engine/Character.h"
class PlayerController;
enum class State{
IDLE,
RUN
};
class Player: public Character {
private:
State m_state;
PlayerController* m_controller;
public:
Player()=delete;
Player(sf::Texture& texture, sf::Vector2f start_pos, float health);
~Player();
void Update(float time)override;
void setState(State state);
};
Код: Выделить всё
#include "Player.h"
#include "Engine/PlayerController.h"
Player::Player(sf::Texture &texture, sf::Vector2f start_pos, float health) {
m_health=health;
m_pos=start_pos;
m_controller = PlayerController::getPlayerController();
m_sprite.setTexture(texture);
m_size=sf::Vector2f(m_sprite.getTextureRect().width,m_sprite.getTextureRect().height);
}
Player::~Player() {}
void Player::Update(float time) {
m_state=State::IDLE;
m_controller->controllPlayer(this,time);
if (m_state == State::RUN) {
}
else {
}
m_sprite.setPosition(m_pos);
}
void Player::setState(State state) {
m_state = state;
}
Код: Выделить всё
cmake_minimum_required(VERSION 3.23)
set(project "porject2121")
project(${project})
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_EXE_LINKER_FLAGS "-static -static-libgcc")
set(SFML_STATIC_LIBRARIES TRUE)
add_executable(${project}
main.cpp
Game/Game.cpp
Game/Engine/PlayerController.cpp
Game/Engine/Character.cpp
Game/Player/Player.cpp
Game/Player/Textures.cpp
Game/Game.h
Game/Engine/PlayerController.h
Game/Engine/Constants.h
Game/Engine/Character.h
Game/Player/Player.h
Game/Player/Textures.h
)
target_include_directories(${project} PRIVATE Game)
set(SFML_DIR "C:\\Users\\Dominus\\CLionProjects\\porject2121\\SFML\\lib\\cmake\\SFML")
target_link_libraries(${project} sfml-graphics sfml-window)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules")
find_package(SFML 2.5 REQUIRED graphics network audio window system)
Код: Выделить всё
cmd.exe /C "cd . && C:\PROGRA~1\JETBRA~1\CLION2~1.2\bin\mingw\bin\G__~1.EXE -g -static -static-libgcc CMakeFiles/porject2121.dir/main.cpp.obj CMakeFiles/porject2121.dir/Game/Game.cpp.obj CMakeFiles/porject2121.dir/Game/Engine/PlayerController.cpp.obj CMakeFiles/porject2121.dir/Game/Engine/Character.cpp.obj CMakeFiles/porject2121.dir/Game/Player/Player.cpp.obj CMakeFiles/porject2121.dir/Game/Player/Textures.cpp.obj -o porject2121.exe -Wl,--out-implib,libporject2121.dll.a -Wl,--major-image-version,0,--minor-image-version,0 ../SFML/lib/libsfml-graphics-s-d.a ../SFML/lib/libsfml-window-s-d.a ../SFML/lib/libsfml-system-s-d.a -lOpenGL32 -lwinmm -lgdi32 ../SFML/lib/libfreetype.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
C:\Program Files\JetBrains\CLion 2022.2\bin\mingw\bin/ld.exe: CMakeFiles/porject2121.dir/main.cpp.obj:C:/Users/Dominus/CLionProjects/porject2121/main.cpp:6: undefined reference to `Textures::setTextures()'
C:\Program Files\JetBrains\CLion 2022.2\bin\mingw\bin/ld.exe: CMakeFiles/porject2121.dir/main.cpp.obj:main.cpp:(.rdata$.refptr._ZN8Textures14player_textureE[.refptr._ZN8Textures14player_textureE]+0x0): undefined reference to `Textures::player_texture'
collect2.exe: error: ld returned 1 exit status.
Подробнее здесь: https://stackoverflow.com/questions/785 ... ns-occured
Мобильная версия