Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Błąd kompilacji: "Multiple definition of .."

Ostatnio zmodyfikowano 2015-06-07 12:16
Autor Wiadomość
marc_xxx
Temat założony przez niniejszego użytkownika
Błąd kompilacji: "Multiple definition of .."
» 2015-06-04 12:34:07
Witam.
Zacząłem pisać jakąś prostą grę korzystając z biblioteki SFML. Podczas definicji jednego z konstruktorów kompilator wywala mi błąd "multiple definition of Menu::Menu, first defined here", i komunikat o błędzie (dotyczącym tej samej linijki) powtarza się parę razy .. o co chodzi? Jak to naprawić? Domyślam się, że błąd jest banalny, pamiętam, że kiedyś z rok temu, pisałem grę i miałem podobny błąd kompilacji i się poddałem.. :D
Definicja klasy Menu:
C/C++
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <string>

using namespace std;

class Menu
{
public:
    Menu( string backgroundFilename, unsigned short width = 1024, unsigned short height = 768 );
    ~Menu();
    inline void draw( sf::RenderWindow & gameWindow );
   
private:
    sf::Texture backgroundImage;
    sf::Sprite background;
};
Definicje funkcji składowych:
C/C++
#include "Menu.hpp"

Menu::Menu( string backgroundFilename, unsigned short width, unsigned short height )
{
    this->backgroundImage.loadFromFile( backgroundFilename );
    this->background.setTexture( this->backgroundImage );
}

Menu::~Menu()
{
   
}

inline void Menu::draw( sf::RenderWindow & gameWindow )
{
    gameWindow.draw( this->background );
}
P-133154
marc_xxx
Temat założony przez niniejszego użytkownika
» 2015-06-04 12:50:20
Ciekawe wyglądają ścieżki do plików, które pokazuje kompulator jako błąd. Najpierw jest ścieżka do mojego pliku i tam jest napisane "Multiple definition of ..", a potem druga podobna ale na początku dodane obj/Debug/main.o/... i przy tej linijce napisane jest "first defined here". Trzeba pozmieniać coś w ustawieniach kompilatora? Kompilator sam sobie stworzył jakieś pliki które dodał do projektu czy co?
P-133155
darko202
» 2015-06-04 13:51:27
zacząłbym od

C/C++
/*  EXAMPLE.H - Example header file  */
#if !defined( EXAMPLE_H )
#define EXAMPLE_H

class Example
{
    ...
};

#endif // !defined( EXAMPLE_H )

https://msdn.microsoft.com​/pl-pl/library/ew2hz0yd.aspx

w Twoim przypadku MENU zamiast EXAMPLE
P-133156
marc_xxx
Temat założony przez niniejszego użytkownika
» 2015-06-04 14:19:44
Nadal jest ten sam błąd kompilacji. Teraz plik z definicją klasy wygląda tak:
C/C++
#ifndef MENU_HPP
#define MENU_HPP

#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <string>

using namespace std;

class Menu
{
public:
    Menu( string backgroundFilename, unsigned short width = 1024, unsigned short height = 768 );
    ~Menu();
    inline void draw( sf::RenderWindow & gameWindow );
   
private:
    sf::Texture backgroundImage;
    sf::Sprite background;
};

#endif
P-133157
Lora
» 2015-06-04 14:35:16
Wklej logi kompilacji.
P-133159
marc_xxx
Temat założony przez niniejszego użytkownika
» 2015-06-04 14:48:57
Nie wiedziałem, który konkretnie fragment wkleić i jakich znacznikó syntax użyć. Wklejam poniżej:
-------------- Build: Debug in game (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe -Wall -fexceptions -g -Iengine\SFML-2.3\include -c C:\Users\Marcin\Desktop\programowanie\game\main.cpp -o obj\Debug\main.o
mingw32-g++.exe -Wall -fexceptions -g -Iengine\SFML-2.3\include -c C:\Users\Marcin\Desktop\programowanie\game\modules\Game.cpp -o obj\Debug\modules\Game.o
mingw32-g++.exe -Wall -fexceptions -g -Iengine\SFML-2.3\include -c C:\Users\Marcin\Desktop\programowanie\game\modules\Menu.cpp -o obj\Debug\modules\Menu.o
mingw32-g++.exe -Lengine\SFML-2.3\lib -o bin\Debug\game.exe obj\Debug\main.o obj\Debug\modules\Button.o obj\Debug\modules\Game.o obj\Debug\modules\Menu.o   engine\SFML-2.3\lib\libsfml-audio-d.a engine\SFML-2.3\lib\libsfml-audio-s-d.a engine\SFML-2.3\lib\libsfml-graphics-d.a engine\SFML-2.3\lib\libsfml-graphics-s-d.a engine\SFML-2.3\lib\libsfml-main-d.a engine\SFML-2.3\lib\libsfml-network-d.a engine\SFML-2.3\lib\libsfml-network-s-d.a engine\SFML-2.3\lib\libsfml-system-d.a engine\SFML-2.3\lib\libsfml-system-s-d.a engine\SFML-2.3\lib\libsfml-window-d.a engine\SFML-2.3\lib\libsfml-window-s-d.a -mwindows
obj\Debug\modules\Game.o: In function `ZN4MenuC2ESstt':
C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:3: multiple definition of `Menu::Menu(std::string, unsigned short, unsigned short)'
obj\Debug\main.o:C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:3: first defined here
obj\Debug\modules\Game.o: In function `ZN4MenuC2ESstt':
C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:3: multiple definition of `Menu::Menu(std::string, unsigned short, unsigned short)'
obj\Debug\main.o:C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:3: first defined here
obj\Debug\modules\Game.o: In function `ZN4MenuD2Ev':
C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:9: multiple definition of `Menu::~Menu()'
obj\Debug\main.o:C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:9: first defined here
obj\Debug\modules\Game.o: In function `ZN4MenuD2Ev':
C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:9: multiple definition of `Menu::~Menu()'
obj\Debug\main.o:C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:9: first defined here
obj\Debug\modules\Menu.o: In function `ZN4MenuC2ESstt':
C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:3: multiple definition of `Menu::Menu(std::string, unsigned short, unsigned short)'
obj\Debug\main.o:C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:3: first defined here
obj\Debug\modules\Menu.o: In function `ZN4MenuC2ESstt':
C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:3: multiple definition of `Menu::Menu(std::string, unsigned short, unsigned short)'
obj\Debug\main.o:C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:3: first defined here
obj\Debug\modules\Menu.o: In function `ZN4MenuD2Ev':
C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:9: multiple definition of `Menu::~Menu()'
obj\Debug\main.o:C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:9: first defined here
obj\Debug\modules\Menu.o: In function `ZN4MenuD2Ev':
C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:9: multiple definition of `Menu::~Menu()'
obj\Debug\main.o:C:/Users/Marcin/Desktop/programowanie/game/modules/Menu.cpp:9: first defined here
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 1 second(s))
16 error(s), 0 warning(s) (0 minute(s), 1 second(s))
P-133160
Monika90
» 2015-06-04 14:59:00
Pewnie w pliku Game.cpp masz #include "menu.cpp" - usuń to.
P-133161
marc_xxx
Temat założony przez niniejszego użytkownika
» 2015-06-04 15:08:33
Dzięki ;)
P-133162
« 1 » 2 3
  Strona 1 z 3 Następna strona