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

multiple definition of ...

Ostatnio zmodyfikowano 2014-06-26 20:55
Autor Wiadomość
Jacob99
Temat założony przez niniejszego użytkownika
multiple definition of ...
» 2014-06-26 20:18:10
Cały czas robię moją grę i dzisiaj przy kompilacji otrzymałem błąd, i nie mam pojęcia skąd on się bierze.
Log błędu:

-------------- Build: Debug in GAME OF THE YEAR EDITION (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe -std=c++11 -Wall -std=c++11 -g -I"D:\SFML 2.0\include" -Iinclude -I"D:\Code Blocks\CodeBlocks\MinGW\include\SFML" -c "D:\Pliki G\Dokumenty\Moje Dokumenty\programowanie w c++ programy i kody źródłowe\GAME OF THE YEAR EDITION\src\Player.cpp" -o obj\Debug\src\Player.o
mingw32-g++.exe -L"D:\SFML 2.0\lib" -L"D:\Pliki G\programowanie w C++\SFML-2.1-windows-gcc-4.7-mingw-32bits\SFML-2.1\lib" -o "bin\Debug\GAME OF THE YEAR EDITION.exe" obj\Debug\main.o obj\Debug\src\GUI.o obj\Debug\src\Player.o   -lsfml-graphics -lsfml-window -lsfml-system -lsfml-audio
obj\Debug\src\Player.o: In function `ZNSt12_Destroy_auxILb1EE9__destroyIPN2sf6VertexEEEvT_S5_':
d:/codeblocks/mingw/lib/gcc/mingw32/4.8.1/include/c++/mingw32/bits/gthr-default.h:300: multiple definition of `event'
obj\Debug\main.o:d:/codeblocks/mingw/lib/gcc/mingw32/4.8.1/include/c++/mingw32/bits/gthr-default.h:300: first defined here
obj\Debug\src\Player.o: In function `_exchange_and_add_single':
d:/codeblocks/mingw/lib/gcc/mingw32/4.8.1/include/c++/ext/atomicity.h:64: multiple definition of `DVS'
obj\Debug\main.o:d:/codeblocks/mingw/lib/gcc/mingw32/4.8.1/include/c++/ext/atomicity.h:64: first defined here
obj\Debug\src\Player.o: In function `_exchange_and_add_dispatch':
d:/codeblocks/mingw/lib/gcc/mingw32/4.8.1/include/c++/ext/atomicity.h:80: multiple definition of `bullet1'
obj\Debug\main.o:d:/codeblocks/mingw/lib/gcc/mingw32/4.8.1/include/c++/ext/atomicity.h:80: first defined here
obj\Debug\src\Player.o: In function `ZN6PlayerC2Ev':
D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/src/Player.cpp:6: multiple definition of `bullet2'
obj\Debug\main.o:D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/main.cpp:8: first defined here
obj\Debug\src\Player.o: In function `ZN6PlayerC2Ev':
D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/src/Player.cpp:9: multiple definition of `text'
obj\Debug\main.o:D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/main.cpp:13: first defined here
obj\Debug\src\Player.o: In function `ZN6PlayerD2Ev':
D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/src/Player.cpp:12: multiple definition of `tex1'
obj\Debug\main.o:D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/main.cpp:17: first defined here
obj\Debug\src\Player.o: In function `ZN6PlayerD2Ev':
D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/src/Player.cpp:12: multiple definition of `tex2'
obj\Debug\main.o:D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/main.cpp:17: first defined here
obj\Debug\src\Player.o: In function `ZN6PlayerD0Ev':
D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/src/Player.cpp:12: multiple definition of `mainView'
obj\Debug\main.o:D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/main.cpp:17: first defined here
obj\Debug\src\Player.o: In function `ZN6PlayerC2ERKS_':
D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/src/Player.cpp:18: multiple definition of `secondView'
obj\Debug\main.o:D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/main.cpp:23: first defined here
obj\Debug\src\Player.o: In function `ZN6PlayerC2ERKS_':
D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/src/Player.cpp:22: multiple definition of `miniback'
obj\Debug\main.o:D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/main.cpp:59: first defined here
obj\Debug\src\Player.o: In function `ZN6PlayerC2EN2sf7TextureENS0_6StringE':
D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/src/Player.cpp:25: multiple definition of `bullet1pos'
obj\Debug\main.o:D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/main.cpp:72: first defined here
obj\Debug\src\Player.o: In function `ZN6PlayerC2EN2sf7TextureENS0_6StringE':
D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/src/Player.cpp:25: multiple definition of `bullet2pos'
obj\Debug\main.o:D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/main.cpp:90: first defined here
obj\Debug\src\Player.o: In function `ZN6Player5cloneEv':
D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/src/Player.cpp:38: multiple definition of `positions'
obj\Debug\main.o:D:/Pliki G/Dokumenty/Moje Dokumenty/programowanie w c++ programy i kody źródłowe/GAME OF THE YEAR EDITION/main.cpp:106: first defined here
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 1 second(s))
26 error(s), 0 warning(s) (0 minute(s), 1 second(s))

Kody:
Player.h
C/C++
#ifndef PLAYER_H
#define PLAYER_H
#include <string>
#include <sstream>
#include "SFML/Graphics.hpp"
class Player
{
public:
    enum Direction { Left = 0, Right = 1, Up = 2, Down = 3 };
    Player();
    Player( sf::Texture new_player_texture, sf::String player_name );
    Player * clone();
    void move( Direction direct, Player sprite );
    Player save( Player & copy_player );
    sf::String gethealth();
    sf::String getpoints();
    sf::String getname();
    virtual ~Player();
    Player( const Player & other );
    Player operator =( Player player );
private:
    sf::String name;
    sf::Sprite player_sprite;
    sf::Texture player_texture;
    long double points;
    long double health;
    const double beginning_health;
    const double beginning_points;
    Player * double_player;
    std::stringstream get;
};

#endif // PLAYER_H
Player.cpp
C/C++
#include "Player.h"
#include "variables_declarations.h"

Player::Player()
    : beginning_health( 100 )
     , beginning_points( 0 )
     , double_player( nullptr )
{
    player_texture.loadFromFile( "Player.png" );
    health = beginning_health;
    points = beginning_points;
    name = sf::String( "Super People" );
}

Player::~Player()
{
    if( double_player != nullptr )
         delete double_player;
   
}

Player::Player( const Player & other )
    : beginning_health( 100 )
     , beginning_points( other.beginning_points )
     , double_player( nullptr )
{
    health = other.health;
    points = other.points;
    player_texture = other.player_texture;
}

Player::Player( sf::Texture new_player_texture, sf::String player_name )
    : beginning_health( 100 )
     , beginning_points( 0 )
     , double_player( nullptr )
{
    player_texture = new_player_texture;
    player_sprite.setTexture( player_texture );
    health = beginning_health;
    points = beginning_points;
    name = player_name;
}

Player * Player::clone()
{
    double_player = new Player;
    double_player->health = beginning_health;
    double_player->points = this->points;
    double_player->name = this->name += " clone";
    double_player->player_texture = this->player_texture;
    double_player->player_sprite = this->player_sprite;
    return double_player;
}

Player Player::save( Player & copy_player )
{
    copy_player.health = this->health;
    copy_player.points = this->points;
    copy_player.name = this->name;
    copy_player.player_texture = this->player_texture;
    copy_player.player_sprite = this->player_sprite;
    return copy_player;
}

void Player::move( Direction direct, Player sprite )
{
    if( direct == Left )
    {
        sprite.player_sprite.move( - krok, player_sprite.getPosition().y );
    }
    else if( direct == Right )
    {
        sprite.player_sprite.move( krok, player_sprite.getPosition().y );
    }
    else if( direct == Up )
    {
        sprite.player_sprite.move( player_sprite.getPosition().x, - krok );
    }
    else
    {
        sprite.player_sprite.move( player_sprite.getPosition().x, krok );
    }
}

sf::String Player::gethealth()
{
    get >> health;
    return get.str();
}

sf::String Player::getname()
{
    return name;
}

sf::String Player::getpoints()
{
    get >> points;
    return get.str();
}

Player Player::operator =( Player player )
{
    player.health = health;
    player.points = points;
    player.name = name;
    player.player_sprite = player_sprite;
    player.player_texture = player_texture;
    return player;
}

main.cpp
C/C++
#include <string>
#include "SFML/Graphics.hpp"
#include "SFML/System.hpp"
#include "variables_declarations.h"

int main()
{
    sf::RenderWindow okno( sf::VideoMode( 600, 500, 32 ), "GAME OF THE YEAR" );
    //**********************************************************************
    okno.setFramerateLimit( 60 );
    DVS.loadFromFile( std::string( "Garfield Comic.ttf" ) );
    text.setFont( DVS );
    text.setString( sf::String( "Witaj w grze New Super People Forever 2014" ) );
    text.setColor( sf::Color::Yellow );
    text.setCharacterSize( 20 );
    tex1.loadFromFile( "pociskl.png" );
    tex2.loadFromFile( "pociskr.png" );
    bullet1.setTexture( tex1 );
    bullet2.setTexture( tex2 );
    bullet1.setPosition( 100, 200 );
    bullet2.setPosition( 500, 200 );
    positions[ 0 ] = bullet1.getPosition();
    positions[ 1 ] = bullet2.getPosition();
   
    bullet1.setScale( 3, 3 );
    bullet2.setScale( 3, 3 );
    bullet1.setOrigin( 5, 3 );
    bullet2.setOrigin( 5, 3 );
   
    //    mainView = okno.getView();
    //    secondView = mainView;
   
    //    unsigned int size = 200; // The 'minimap' view will show a smaller picture of the map
    // sf::View minimap(sf::FloatRect(secondView.getCenter().x, secondView.getCenter().y, static_cast<float>(size), static_cast<float>(okno.getSize().y*size/okno.getSize().x)));
    // minimap.setViewport(sf::FloatRect(1.f-static_cast<float>(minimap.getSize().x)/okno.getSize().x-0.02f, 1.f-static_cast<float>(minimap.getSize().y)/okno.getSize().y-0.02f,
    //    static_cast<float>(minimap.getSize().x)/okno.getSize().x, static_cast<float>(minimap.getSize().y)/okno.getSize().y));
    //
    // minimap.zoom(4.f);
    //
    // // The 'left' and the 'right' view will be used for splitscreen displays
    // sf::View left(sf::FloatRect(0.f, 0.f, static_cast<float>(okno.getSize().x/2), static_cast<float>(okno.getSize().y)));
    // left.setViewport(sf::FloatRect(0.f, 0.f, 0.5, 1.f));
    // sf::View right(sf::FloatRect(0.f, 0.f, static_cast<float>(okno.getSize().x/2), static_cast<float>(okno.getSize().y)));
    // right.setViewport(sf::FloatRect(0.5, 0.f, 0.5, 1.f));
    // right.move(100.f, 100.f); // The 'right' view should be set a bit diffrent to notice the difference
    //
    // miniback.setPosition(minimap.getViewport().left*okno.getSize().x-5, minimap.getViewport().top*okno.getSize().y-5);
    // miniback.setSize(sf::Vector2f(minimap.getViewport().width*okno.getSize().x+10, minimap.getViewport().height*okno.getSize().y+10));
    // miniback.setFillColor(sf::Color(160, 8, 8));
   
    while( okno.isOpen() )
    {
       
       
       
        while( okno.pollEvent( event ) )
        {
           
            if( event.type == sf::Event::Closed )
                 okno.close();
           
            if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::End )
                 okno.close();
           
            if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape )
                 okno.close();
           
            if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Right )
            {
                okno.clear( sf::Color::White );
                bullet2.move( krok, 0 );
                if( bullet2.getPosition().x > 600 )
                {
                    bullet2.setPosition( 0, bullet2.getPosition().y );
                }
            }
            if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Left )
            {
                okno.clear( sf::Color::White );
                bullet2.move( - krok, 0 );
                if( bullet2.getPosition().x < 0 )
                {
                    bullet2.setPosition( 600, bullet2.getPosition().y );
                }
            }
            if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Up )
            {
                okno.clear( sf::Color::White );
                bullet2.move( 0, - krok );
                if( bullet2.getPosition().y < 0 )
                {
                    bullet2.setPosition( bullet2.getPosition().x, 500 );
                }
            }
            if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Down )
            {
                okno.clear( sf::Color::White );
                bullet2.move( 0, krok );
                if( bullet2.getPosition().y > 500 )
                {
                    bullet2.setPosition( bullet2.getPosition().x, 0 );
                }
               
            }
            if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::RShift )
                 bullet2.setPosition( positions[ 1 ] );
           
        }
        okno.clear( sf::Color::White );
        okno.draw( bullet1 );
        okno.draw( bullet2 );
        okno.draw( text );
        okno.display();
    }
    return 0;
}

i deklaracje zmiennych:
variables_declarations.h
C/C++
#ifndef VARIABLES_DECLARATIONS_H
#define VARIABLES_DECLARATIONS_H 0x2F

#include "SFML/Graphics.hpp"
#include <vector>

sf::Event event;
sf::Font DVS;
sf::Sprite bullet1, bullet2;
sf::Text text;
sf::Texture tex1, tex2;

std::vector < sf::Vector2f > positions( 10 );

const int krok = 10;

#undef VARIABLES_DECLARATIONS_H
#endif // VARIABLES_DECLARATIONS_H

Jeśli zakomentuję lub wyrzucę z projektu plik Player.cpp to normalnie się kompiluje. Ale wystarczy, że odkomentuję tylko dyrektywę
#include
lub jakiś inny fragment kodu i wywala mi ten błąd.
P-112805
pekfos
» 2014-06-26 20:26:16
Zmiennych nie definiuje się w nagłówkach.

C/C++
#undef VARIABLES_DECLARATIONS_H
Wiesz co robisz..?
P-112809
Jacob99
Temat założony przez niniejszego użytkownika
» 2014-06-26 20:55:36
@Pekfos
Poprawiłem to i dodałem jedną zmienną do klasy Player i działa.
Dzięki :)
P-112817
« 1 »
  Strona 1 z 1