[QT/C++]

Pagina: 1
Acties:
  • 850 views sinds 30-01-2008
  • Reageer

Onderwerpen


  • Choxo
  • Registratie: September 2003
  • Laatst online: 10-11-2023
Beste,

Voor een schoolopdracht moeten we een bordspel implementeren in C++ in combinatie met Qt.

Nu lopen we echter op een compile error waar we totaal niet aan uit kunnen.

De error ziet er als dit uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
1>------ Build started: Project: guikapot, Configuration: Debug Win32 ------
1>Moc'ing GUIGame.h...
1>Compiling...
1>main.cpp
1>GUIGame.cpp
1>..\..\..\guikapot\GUIGame.cpp(83) : warning C4996: 'itoa' was declared deprecated
1>        E:\Program Files\Microsoft Visual Studio 8\VC\include\stdlib.h(820) : see declaration of 'itoa'
1>        Message: 'The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _itoa. See online help for details.'
1>BordGUI.cpp
1>c:\documents and settings\me\desktop\guikapot\GUIGame.h(47) : error C2143: syntax error : missing ';' before '*'
1>c:\documents and settings\me\desktop\guikapot\GUIGame.h(47) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\documents and settings\me\desktop\guikapot\GUIGame.h(47) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int


De GUIGame.h file ziet er zo uit:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#ifndef GUIGAME_H
#define GUIGAME_H

#include <QMainwindow>
#include <QMenu>
#include <QMessageBox>
#include <QMenuBar>
#include <QGridLayout>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QListWidget>
#include "ManagePionnen.h"
#include "Game.h"
#include "BordGUI.h"
#include "PionGUI.h"
#include "dobbelGUI.h"
#include "logGUI.h"

class GUIGame : public QMainWindow, public Game
{
    Q_OBJECT
public:
    GUIGame();
    void speel();

private slots:
    void help();
    void managePionnen();
    void credits();
    void close(){ exit(0);}
    void zetPion();

private:
    
    void disableBeforePlay(void);
    int controleEind(int positie);
    
    QMenu* gamemenu;
    QMenu* helpmenu;
    QGraphicsScene *canvas;
    QGraphicsView *view;
    logGUI *gamelog;
    BordGUI *m_GUIBord;
    DobbelGUI *m_GUIDobbel;
    
    bool gedaan;
};

#endif


Hij lijkt dus te denken dat de declaratie van de BORDGUI pointer m_GUIBord een functie is (... int assumed...)

De BORDGUI classe ziet er zo uit:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#ifndef BORDGUI_H
#define BORDGUI_H

#include <QGraphicsScene>
#include <QGraphicsView>

#include "Bord.h"
#include "GUIGame.h"

#include "VakGUI.h"

#include <vector>

class BordGUI :public QWidget, public QGraphicsScene
{

public:
    BordGUI(QGraphicsScene *canvas);
    VakGUI* geefVakGUI(int positie) {return &m_BordGUI[positie];};
    int geefBordGrootte(void) const {return m_BordGUI.size();};
private:
    std::vector<VakGUI> m_BordGUI;

};

#endif


Weet er iemand wat er mogelijk misgaat?
Ik heb geen idee hoe ik dit beter kan uitleggen, of wat er allemaal gebeurt, want voor mij lijkt het allemaal te kloppen, en snap ik niet waarom VS2005 die error geeft.

Ergens denk ik dat VS in de knoop zit met de includes, want wanneer ik de
#include "GUIgame.h"
comment,
dan krijg ik deze resem errors:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1>------ Build started: Project: guikapot, Configuration: Debug Win32 ------
1>Moc'ing GUIGame.h...
1>Compiling...
1>main.cpp
1>GUIGame.cpp
1>..\..\..\guikapot\GUIGame.cpp(83) : warning C4996: 'itoa' was declared deprecated
1>        E:\Program Files\Microsoft Visual Studio 8\VC\include\stdlib.h(820) : see declaration of 'itoa'
1>        Message: 'The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _itoa. See online help for details.'
1>BordGUI.cpp
1>Generating Code...
1>Linking...
1>dobbelGUI.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall DobbelGUI::metaObject(void)const " (?metaObject@DobbelGUI@@UBEPBUQMetaObject@@XZ)
1>dobbelGUI.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall DobbelGUI::qt_metacast(char const *)" (?qt_metacast@DobbelGUI@@UAEPAXPBD@Z)
1>dobbelGUI.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall DobbelGUI::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@DobbelGUI@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>GUIGame.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall GUIGame::metaObject(void)const " (?metaObject@GUIGame@@UBEPBUQMetaObject@@XZ)
1>GUIGame.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall GUIGame::qt_metacast(char const *)" (?qt_metacast@GUIGame@@UAEPAXPBD@Z)
1>GUIGame.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall GUIGame::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@GUIGame@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>GUIGame.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const GUIGame::staticMetaObject" (?staticMetaObject@GUIGame@@2UQMetaObject@@B)
1>logGUI.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall logGUI::metaObject(void)const " (?metaObject@logGUI@@UBEPBUQMetaObject@@XZ)
1>logGUI.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall logGUI::qt_metacast(char const *)" (?qt_metacast@logGUI@@UAEPAXPBD@Z)
1>logGUI.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall logGUI::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@logGUI@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>ManagePionnen.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall ManagePionnen::metaObject(void)const " (?metaObject@ManagePionnen@@UBEPBUQMetaObject@@XZ)
1>ManagePionnen.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall ManagePionnen::qt_metacast(char const *)" (?qt_metacast@ManagePionnen@@UAEPAXPBD@Z)
1>ManagePionnen.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall ManagePionnen::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@ManagePionnen@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>ManagePionnen.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const ManagePionnen::staticMetaObject" (?staticMetaObject@ManagePionnen@@2UQMetaObject@@B)
1>VakGUI.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall VakGUI::metaObject(void)const " (?metaObject@VakGUI@@UBEPBUQMetaObject@@XZ)
1>VakGUI.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall VakGUI::qt_metacast(char const *)" (?qt_metacast@VakGUI@@UAEPAXPBD@Z)
1>VakGUI.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall VakGUI::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@VakGUI@@UAEHW4Call@QMetaObject@@HPAPAX@Z)
1>C:\Documents and Settings\me\Desktop\basisklassen&console\guikapot\Debug\guikapot.exe : fatal error LNK1120: 17 unresolved externals
1>Build log was saved at "file://c:\Documents and Settings\me\Desktop\basisklassen&console\guikapot\guikapot\Debug\BuildLog.htm"
1>guikapot - 18 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========



BordGUI.h ziet er zo uit:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#ifndef BORDGUI_H
#define BORDGUI_H

#include <QGraphicsScene>
#include <QGraphicsView>

#include "Bord.h"
#include "GUIGame.h"

#include "VakGUI.h"

#include <vector>

class BordGUI :public QWidget, public QGraphicsScene
{

public:
    BordGUI(QGraphicsScene *canvas);
    VakGUI* geefVakGUI(int positie) {return &m_BordGUI[positie];};
    int geefBordGrootte(void) const {return m_BordGUI.size();};
private:
    std::vector<VakGUI> m_BordGUI;

};

#endif



Heeft iemand een idee wat er misloopt?
Ik hoop dat deze topic niet overkomt als "ik zie het zelf niet direct dus ik vraag het iemand anders.", want zo is het niet bedoeld...


Dank bij voorbaat!

[ Voor 0% gewijzigd door een moderator op 15-11-2007 14:18 . Reden: highlighting maakt het wat leesbaarder :) ]

×××


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

1>c:\documents and settings\me\desktop\guikapot\GUIGame.h(47) : error C2143: syntax error : missing ';' before '*'
Er mist een ; aan het einde van de .h file, wat betekent dat er ergens daarvoor iets mis is (meestal een ontbrekende ; ). Kwestie van goed doorlezen. Meestal komen er dan nog allemaal andere errors uit voort die weinig te maken hebben met het eigenlijke probleem.

spoiler:
Kijk eens naar je private slot close()

[ Voor 17% gewijzigd door Gerco op 15-11-2007 14:08 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Gerco schreef op donderdag 15 november 2007 @ 14:03:
spoiler:
Kijk eens naar je private slot close()
spoiler:
Kijk zelf nog eens goed ;)


Ik ken Qt niet, maar klopt die Q_OBJECT daar bovenaan wel? Moet daar misschien niet nog een ; achter?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Choxo
  • Registratie: September 2003
  • Laatst online: 10-11-2023
We waren ondertussen bezig met alles over te typen,
en VS geeft nu geen fouten meer...

Toch bedankt voor de snelle respons, en laten we hopen dat de error binnenkort niet weer opduikt...

×××


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Je hebt gelijk, ik had voor mn beurt gesproken |:(
Ik ken Qt niet, maar klopt die Q_OBJECT daar bovenaan wel? Moet daar misschien niet nog een ; achter?
Volgens een paar van mijn eigen, oude, Qt sources niet.

@TS
Van overtikken leer je natuurlijk niets. Er is nu iets mis met die source (of met de includes daarboven). Wat precies kan ik zo snel ff niet zien, maar als je het overtikt en gewoon hoopt dat het dan wel werkt ben je niet handig bezig.

[ Voor 15% gewijzigd door Gerco op 15-11-2007 14:36 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Tenzij je niet exact hebt overgetikt. Je zou eens met een diff tool kunnen kijken wat nou precies het verschil is tussen de twee files.

Wat overigens ook kan is gewoon een foute whitespace die de compiler verkeerd interpreteert oid.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Stukfruit
  • Registratie: Oktober 2007
  • Niet online
Die linker errors voor al die meta objecten komen vanuit de bestanden die qmake voor je maakt na het omzetten van je headers (of jijzelf, maar ik denk dat je als beginner niet zelf al met moc aan de slag gaat).

Het komt er op neer dat je die resulterende bestandjes nog even moet compileren en linken zodat de methodes gevonden kunnen worden door de linker.

Ik zie dat er in je log "Moc'ing GUIGame.h..." vermeld staat.. dat zou kunnen betekenen dat je de Qt integratie voor MSVC gebruikt, klopt dat? Dan zou het voor zover ik weet automatisch mee gebouwd en gelinkt moeten worden, maar zo niet dan zou je kunnen proberen om oa. GUIGame.cxx mee te kunnen nemen in de lijst van te compileren bronbestanden (alle headers die worden ge'moc'ed worden afaik standaard weggeschreven naar <naam_van_bestand>.cxx).

Die eerste error krijg je trouwens vaak als er een type niet (goed) gedefinieerd is. Met dat soort dingen kan je ook je (eigen) headers eens nakijken op fouten, missende semi-kolonnen, enz.
Ik zou die headers sowieso niet daar includen maar gewoon de benodigde classen forwarden, maar dat leer je vast nog wel een keer :P)

Dat zit wel Schnorr.

Pagina: 1