Błąd kompilacji: "Multiple definition of .."
Ostatnio zmodyfikowano 2015-06-07 12:16
marc_xxx Temat założony przez niniejszego użytkownika |
» 2015-06-04 15:18:08 Eh, no i znowu to samo, jak dołączam do pliku main.cpp pliki .cpp klas (te z definicjami funcji składowych) to robi się podobny błąd :/ A czy w plikach .cpp klas też trzeba dodawać tego strażnika dołączania (ifndef, deine)? Log kompilacji akutalny: -------------- 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 `ZN4GameC2Ett': C:/Users/Marcin/Desktop/programowanie/game/modules/Game.cpp:5: multiple definition of `Game::Game(unsigned short, unsigned short)' obj\Debug\main.o:C:/Users/Marcin/Desktop/programowanie/game/modules/Game.cpp:5: first defined here obj\Debug\modules\Game.o: In function `ZN4GameC2Ett': C:/Users/Marcin/Desktop/programowanie/game/modules/Game.cpp:5: multiple definition of `Game::Game(unsigned short, unsigned short)' obj\Debug\main.o:C:/Users/Marcin/Desktop/programowanie/game/modules/Game.cpp:5: first defined here obj\Debug\modules\Game.o: In function `ZN4GameD2Ev': C:/Users/Marcin/Desktop/programowanie/game/modules/Game.cpp:11: multiple definition of `Game::~Game()' obj\Debug\main.o:C:/Users/Marcin/Desktop/programowanie/game/modules/Game.cpp:11: first defined here obj\Debug\modules\Game.o: In function `ZN4GameD2Ev': C:/Users/Marcin/Desktop/programowanie/game/modules/Game.cpp:11: multiple definition of `Game::~Game()' obj\Debug\main.o:C:/Users/Marcin/Desktop/programowanie/game/modules/Game.cpp:11: first defined here obj\Debug\modules\Game.o: In function `_gthread_active_p': c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/include/c++/mingw32/bits/gthr-default.h:403: multiple definition of `Game::isRunning' obj\Debug\main.o:c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/include/c++/mingw32/bits/gthr-default.h:403: 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)) 18 error(s), 0 warning(s) (0 minute(s), 1 second(s))
|
|
Monika90 |
» 2015-06-04 15:35:22 Nie inkluduje się plików *.cpp |
|
marc_xxx Temat założony przez niniejszego użytkownika |
» 2015-06-04 16:07:43 Te z rozszerzeniem hpp ? no ale wydaje mi sięto nielogiczne, plik hpp załączam do pliku cpp a potem plik cpp dołączam do pliku main. Bo jak dołączam pliki hpp to kompilator mówi mi że nie zna funkcji. |
|
Lora |
» 2015-06-04 16:21:51 Inkluduje się pliki hpp. Może tej funkcji, której kompilator nie widzi nie masz zdeklarowanej w pliku hpp. |
|
marc_xxx Temat założony przez niniejszego użytkownika |
» 2015-06-05 00:02:46 Tak teraz, po poprawieniu, wygląda plik menu.hpp: #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
a tak Menu.cpp: #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 ); }
Z kolei tak wygląda main: #include "modules/Game.hpp" #include "modules/Menu.hpp"
int main() { Game * game = new Game; Menu menu( "smallee" ); while( game->mainWindow.isOpen() ) { sf::Event event; while( game->mainWindow.pollEvent( event ) ) { if( event.type == sf::Event::Closed ||( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape ) ) { delete game; } } game->mainWindow.clear(); menu.draw( game->mainWindow ); game->mainWindow.display(); } return 0; }
błąd jest w pliku main, w linijce gdy wywołuję funkcję składową draw klasy Menu. Co jest nie tak? |
|
JMII89 |
» 2015-06-05 00:38:57 Przy tworzeniu obiektu w mainie nawet nie podajesz wartości dla width i height. |
|
Monika90 |
» 2015-06-05 12:00:56 Przy tworzeniu obiektu w mainie nawet nie podajesz wartości dla width i height. |
width i height mają domyślne wartości. błąd jest w pliku main, w linijce gdy wywołuję funkcję składową draw klasy Menu. Co jest nie tak? |
Jaki błąd?
if( ) { delete game; } }
game->mainWindow.clear();
|
Niszczysz game, a potem używasz. |
|
marc_xxx Temat założony przez niniejszego użytkownika |
» 2015-06-05 15:58:55 Nie niszczę gry, niszczę dopiero gdy zamknę okno escapem (IF). Poza tym funkcję draw wywołuję dla obiektu klasy Menu, a nie dla gry, argumentem jest obiekt klasy Game, ale wysłać go mogę bo gra wtedy istnieje. |
|
1 « 2 » 3 |