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
» 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))
P-133163
Monika90
» 2015-06-04 15:35:22
Nie inkluduje się plików *.cpp
P-133166
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.
P-133170
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.
P-133171
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:
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

a tak Menu.cpp:
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 );
}

Z kolei tak wygląda main:
C/C++
#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?
P-133197
JMII89
» 2015-06-05 00:38:57
Przy tworzeniu obiektu w mainie nawet nie podajesz wartości dla width i height.
P-133198
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?


C/C++
if( /*...*/ )
{
    delete game;
}
}

game->mainWindow.clear();
Niszczysz game, a potem używasz.
P-133211
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.
P-133216
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona