[C++] error C2146: syntax error : missing ';' before identifier
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

[C++] error C2146: syntax error : missing ';' before identifier

AutorWiadomość
Temat założony przez niniejszego użytkownika
[C++] error C2146: syntax error : missing ';' before identifier
» 2012-12-25 21:32:54
Witam,
pisząc aplikację napotkałem dziwne błędy, które wyrzucił log. A oto i one:


1>------ Build started: Project: SFML_Game1, Configuration: Debug Win32 ------
1>Compiling...
1>main.cpp
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.h(7) : error C2146: syntax error : missing ';' before identifier 'hero'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.h(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.h(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.h(14) : error C2228: left of '.start' must have class/struct/union
1>        type is 'int'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.h(25) : error C2664: 'sf::RenderTarget::Draw' : cannot convert parameter 1 from 'int' to 'const sf::Drawable &'
1>        Reason: cannot convert from 'int' to 'const sf::Drawable'
1>        No constructor could take the source type, or constructor overload resolution was ambiguous
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\events.h(9) : error C2146: syntax error : missing ';' before identifier 'hero'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\events.h(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\events.h(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\events.h(9) : error C2086: 'int hero' : redefinition
1>        e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.h(7) : see declaration of 'hero'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\events.h(17) : error C2678: binary '==' : no operator found which takes a left-hand operand of type 'sf::Event::KeyEvent' (or there is no acceptable conversion)
1>        e:\program files\microsoft sdks\windows\v6.0a\include\guiddef.h(192): could be 'int operator ==(const GUID &,const GUID &)'
1>        while trying to match the argument list '(sf::Event::KeyEvent, sf::Key::Code)'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\events.h(19) : error C3861: 'Colision': identifier not found
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\events.h(20) : error C2228: left of '.Run' must have class/struct/union
1>        type is 'int'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(7) : error C2146: syntax error : missing ';' before identifier 'hero'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\main.cpp(7) : error C2086: 'int hero' : redefinition
1>        e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\game1.h(7) : see declaration of 'hero'
1>Build log was saved at "file://e:\Documents and Settings\SysOp\Moje dokumenty\Visual Studio 2008\Projects\SFML_Game1\SFML_Game1\Debug\BuildLog.htm"
1>SFML_Game1 - 16 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Wyrzuca go po próbie kompilacji tego kodu:
C/C++
//main.cpp
#include <SFML/Graphics.hpp>

#include "Game1.h"
#include "Events.h"

sf::RenderWindow GameApp( sf::VideoMode( 800, 600, 32 ), "SFML Untitled aplication" );
Hero hero( 100, 100, true );
Game1 Game;

int main()
{
    Game.onStart();
   
    while( GameApp.IsOpened() )
    {
        GameEvent();
        Game.Update();
        Game.Draw();
    }
    return 0;
}

//Game1.h
#ifndef Game1_h
#define Game1_h

#include <SFML/Graphics.hpp>

extern sf::RenderWindow GameApp;
extern Hero hero;

class Game1
{
public:
    void onStart()
    {
        hero.start();
    }
   
    void Update()
    {
       
    }
   
    void Draw()
    {
        GameApp.Clear( sf::Color( 255, 255, 255 ) );
        GameApp.Draw( hero );
        GameApp.Display();
    }
   
    void Exit()
    {
        GameApp.Close();
    }
};


#endif

//Hero.h
#ifndef Hero_h
#define Hero_h

#include <SFML/Graphics.hpp>

extern sf::RenderWindow GameApp;
extern Game1 Game;

struct Hero
{
    int posX;
    int posY;
    bool flip;
    sf::Image img;
    sf::Sprite sprite;
    float speed;
   
    Hero( int PosX, int PosY, bool Flip )
        : posX( PosX )
        , posY( PosY )
        , Flip( flip )
    { }
   
public:
    void start()
    {
        img.LoadFromFile( "2.png" );
        sprite.SetImage( img );
        sprite.SetPosition( posX, posY );
        speed = + 1.0;
        sprite.FlipX( flip );
    }
    void Run()
    {
        sprite.Move( speed, 0.0 );
    }
};

#endif

//Events.h
#ifndef Events_h
#define Events_h

#include <SFML/Graphics.hpp>

sf::Event Event;
extern sf::RenderWindow GameApp;
extern Hero hero;
extern Game1 Game;

void GameEvent()
{
    while( GameApp.GetEvent( Event ) )
    {
        if( Event.Type == sf::Event::Closed )
             Game.Exit();
       
        if( Event.Key == sf::Key::D )
        {
            if( Colision() != true )
                 hero.Run();
           
        }
       
    }
}

bool Colision()
{
    return false;
}

#endif

Kompletnie tego nie rozumiem, gdyż przejrzałem dokładnie cały kod i nigdzie, a w szczególności w i po klasie "Hero" nie brakuje średnika. Reszta błędów wynika najprawdopodobniej z tego jednego, więc niema co się nimi przejmować.

Już nie raz przekonałem się, że mogę na was liczyć i mam nadzieję, że z tym też dacie radę ;)

Link do Bibliotek: http://sfml-dev.org/
P-71943
» 2012-12-25 22:08:17
Po prostu klasa "Hero" jest nieznana :)
P-71949
Temat założony przez niniejszego użytkownika
» 2012-12-26 10:06:37
Nie rozumiem... Przecież zadeklarowałem
Hero hero
 w pliku głównym - main.cpp, a w plikach nagłówkowych załączyłem przez
extern Hero hero
P-71975
» 2012-12-26 10:17:12
A nie zapomniałeś dodać
#include "Hero.h"

do main.cpp?
P-71976
Temat założony przez niniejszego użytkownika
» 2012-12-26 10:23:11
No rzeczywiście, ale po dodaniu ciągle wywala ten sam błąd, tyle, że w odniesieniu do klasy Game. Oto fragment logu:
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\hero.h(7) : error C2146: syntax error : missing ';' before identifier 'Game'
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\hero.h(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents and settings\sysop\moje dokumenty\visual studio 2008\projects\sfml_game1\sfml_game1\hero.h(7) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
P-71977
» 2012-12-26 12:35:39
Teraz tam brakuje deklaracji hero.
P-71983
Temat założony przez niniejszego użytkownika
» 2012-12-26 17:52:12
Teraz tam brakuje deklaracji hero.

Hymm... przeciez jest odwołanie
extern Hero hero
P-72013
» 2012-12-26 17:55:27
Ale bez include extern nie działa.
P-72014
« 1 » 2
 Strona 1 z 2Następna strona