• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
classi
#1
riprendendo questa discussione ho riscontrato dei problemi nella programmazione object oriented con il c++ e darkGDK +OOGDK (info)
quando programmo in c++ senza librerie aggiuntive tutto bene : riesco a dichiarare classi metodi etc. etc.
ma quando tento di creare una classe quando programmo con darkGDK e OOGDK e dichiaro una classe mi da i più strani degli errori.
chi mi puo aiutare
who can help me?? XDXD
 
Rispondi
#2
Che tipo di errori?

Edit
Sinceramente io utilizzerei quello normale e poi lo strutturerei in un'altro modo. Cioè.. se devi fare un gioco puoi orientarlo con le classi anche in un'altro modo. Ad esempio puoi semplicemente creare una classe personaggio che è mettergli un'attributo "objID" che indica quale oggetto sfruttare di DGDK Smile Tanto.. o scrivi (in DarkBasicPro te lo scrivo che in DGDK):
Codice:
position object objID,x#,y#,z#
o (codice per rendere l'idea)
Codice:
object.position.x = x#
object.position.x = y#
object.position.x = y#

Alla fine sono sempre istruzioni racchiude nel metodo di una classe e quindi non ti fà nessuna differenza Smile
 
Rispondi
#3
se voglio fare come dici tu devo per forza dichiarare una classe(se ho capito bene)
in particolare gli errori non me ne da compilando ma sopratutto non mi "trova" i metodi della classe che sto usando,per esempio:
Codice:
ho la classe "player" e nel main scrivo:
player::                        a questo punto dovrebbe aprirsi un pop up che mi indichi tutti i metodi ma non si apre

questo mi succede solo usando darkGDK
 
Rispondi
#4
(09-01-2011, 09:54 PM)zapetino Ha scritto: se voglio fare come dici tu devo per forza dichiarare una classe(se ho capito bene)
in particolare gli errori non me ne da compilando ma sopratutto non mi "trova" i metodi della classe che sto usando,per esempio:
Codice:
ho la classe "player" e nel main scrivo:
player::                        a questo punto dovrebbe aprirsi un pop up che mi indichi tutti i metodi ma non si apre

questo mi succede solo usando darkGDK

Non sò aiutarti allora. Ad ogni modo dichiarando la classe come ti dicevo io prima ti verrebbe molto più simplice l'organizzazione del codice e soprattutto l'aggiunta di altro codice, poi come vuoi tu Wink
 
Rispondi
#5
altri aiuti ?? XD
 
Rispondi
#6
(09-01-2011, 09:54 PM)zapetino Ha scritto: se voglio fare come dici tu devo per forza dichiarare una classe(se ho capito bene)
in particolare gli errori non me ne da compilando ma sopratutto non mi "trova" i metodi della classe che sto usando,per esempio:
Codice:
ho la classe "player" e nel main scrivo:
player::                        a questo punto dovrebbe aprirsi un pop up che mi indichi tutti i metodi ma non si apre

questo mi succede solo usando darkGDK

(Se la classe non l'hai scritta tu è probabile che inizi con la lettera maiuscola, occhio che spesso si fanno errori per stupidate simili xD )

Sei sicuro di aver incluso tutti gli header necessari?
Inoltre verifica che il compilatore riconosce i vari percorsi. Basta fare una prova del tipo:
Codice PHP:
#include // vari file da includere
#include // vari file da includere

int main()
{
    return 
0;

Se ti da errori di compilazione evidentemente c'è qualcosa che non va... se li hai postali che vediamo di risolverli.

Se ci sono molti include o si lavora con classi abbastanza grandi (e sicuramente è il tuo caso) visual studio impiega un po' di tempo a caricare tutto. Nella versione 2010 c'è una barra in basso che segna se è pronto o se sta caricando.

Alcune volte capita anche a me che intellisense non carica. Solitamente mi basta lanciare una compilazione, chiudere e riaprire il programma oppure premere un po' di volte alt+destra (tasto rapido per i suggerimenti di intellisense).
 
Rispondi
#7
si le classi le creo io per esempio
creo un nuovo file .h e scrivo per esempio :
Codice:
#include "darkGdk.h"

class player
{

void Controlli ( float vel, float H-Salto)
{
//gestione dei controlli
}

poi sia includendo e non il file h nel main del gioco
quando scrivo appunto :
player:: ......non mi esce nulla !!!!
 
Rispondi
#8
Ma hai provato a lanciare una compilazione o a premere ripetutamente alt+destra dopo player:: ?
Probabilmente l'intellisense prima di caricarti il tuo header player.h carica darkgdk.h (e ci mette un po' di tempo per caricare tutto). Controlla anche se nella barra sotto (non so se c'è anche in vs2008) c'è scritto "Pronto" o segna qualche caricamento.

Comunque verifica se è un problema dell'intellisense oppure c'è proprio un errore di sintassi, scrivi un abbozzo di programma senza usare l'aiuto dell'autocompletamento e vedi se te lo compila senza errori.
 
Rispondi
#9
provato e finalmente mi è uscito il pop up però compilando mi da questi errori:

Codice:
------ Inizio compilazione: Progetto: prova OOP, Configurazione: Debug Win32 ------
Compilazione in corso...
Main.cpp
c:\documents and settings\simo\documenti\visual studio 2008\projects\prova oop\prova oop\main.cpp(6) : error C2628: 'player' non può essere seguito da 'void'. Si è omesso ';'?
c:\documents and settings\simo\documenti\visual studio 2008\projects\prova oop\prova oop\main.cpp(6) : error C2556: 'player DarkGDK(void)': la funzione in overload differisce da 'void DarkGDK(void)' solo per il tipo restituito
        c:\programmi\the game creators\dark gdk\include\darksdk.h(84): vedere la dichiarazione di 'DarkGDK'
c:\documents and settings\simo\documenti\visual studio 2008\projects\prova oop\prova oop\main.cpp(6) : error C2371: 'DarkGDK': ridefinizione. Tipi di base differenti.
        c:\programmi\the game creators\dark gdk\include\darksdk.h(84): vedere la dichiarazione di 'DarkGDK'
c:\documents and settings\simo\documenti\visual studio 2008\projects\prova oop\prova oop\main.cpp(7) : error C2447: '{': intestazione di funzione mancante. Elenco formale di tipo obsoleto?
Il log di compilazione è stato salvato in 'file://c:\Documents and Settings\simo\Documenti\Visual Studio 2008\Projects\prova OOP\prova OOP\Debug\BuildLog.htm'
prova OOP - 4 errore/i, 0 avviso/i
========== Compilazione: 0 completate, 1 non riuscite, 0 aggiornate, 0 ignorate ==========

ecco il mio Main
Codice:
#include "DarkGDK.h"
#include "player.h"

void DarkGDK ( void )
{
    
    dbSyncOn   ( );
    dbSyncRate ( 60 );
    player Man;
        Man.Controlli();
    
    
    while ( LoopGDK ( ) )
    {
        dbSync ( );
    }

    return;
}

ed il mio player.h:
Codice:
class player
{
    void Controlli()
    {
    dbPrint("si tranquillo funge ^^");
    }
}
 
Rispondi
#10
Allora...
  • 'player' non può essere seguito da 'void'. Si è omesso ';'?
    Soluzione: alla fine di ogni classe ci vuole un ";"
    Codice:
    class player
    {
        void Controlli()
        {
        dbPrint("si tranquillo funge ^^");
        }
    }; // <--

  • 'player DarkGDK(void)': la funzione in overload differisce da 'void DarkGDK(void)' solo per il tipo restituito & 'DarkGDK': ridefinizione. Tipi di base differenti. & '{': intestazione di funzione mancante. Elenco formale di tipo obsoleto?
    Soluzione: nel tuo main file hai la funzione void DarkGDK(void), questa funzione entra in conflitto con una funzione chiamata anch'essa DarkGDK() che sta nel file darkgdk.h .
    Quella dovrebbe essere la tua main function, e la devi chiamare per forza int main(void)[i] (al massimo puoi aggiungerci parametri, ma il tipo che restituisce e il nome dev'essere quello). Inoltre il [i]return; finale dovrebbe essere return 0; visto che ora la funzione prevede di restituire un intero.

Poi ti consiglio di mettere un costruttore e un distruttore nella tua classe. Forse non ti servirà usarle, visto che questo è il primo programma che fai con darkgdk e oop, però è buona norma metterli sempre (anche se il compilatore dovrebbe assegnarne uno di default in caso non li hai messi tu.
Codice:
class player
{
public:   //se non lo metti di default sono privati, quindi non puoi richiamare i vari metodi o modificare i vari parametri al di fuori della classe
    player(void) //costruttore
    {
    }

    ~player(void) //distruttore
    {
    }

    void Controlli()
    {
    dbPrint("si tranquillo funge ^^");
    }
};
 
Rispondi
#11
ma quanto sono n<bbo io in confronto a te XD
almeno la virgola me la potevo risparmiare.....anche distratto sono XD

allora ho modificato il main così :
Codice:
#include "DarkGDK.h"
#include "player.h"
int Main()
    {
    
    dbSyncOn   ( );
    dbSyncRate ( 60 );
    
    player Man;
        Man.Controlli();

    while ( LoopGDK ( ) )
    {
        dbSync ( );
    }

    return 0;

}

e ora gli errori sono questi:
Codice:
------ Inizio compilazione: Progetto: prova OOP, Configurazione: Debug Win32 ------
Compilazione in corso...
Main.cpp
Collegamento in corso...
darksdk.lib(DarkSDK.obj) : error LNK2019: riferimento al simbolo esterno "void __cdecl DarkGDK(void)" (?DarkGDK@@YAXXZ) non risolto nella funzione _WinMain@16
Debug\prova OOP.exe : fatal error LNK1120: 1 esterni non risolti
Il log di compilazione è stato salvato in 'file://c:\Documents and Settings\simo\Documenti\Visual Studio 2008\Projects\prova OOP\prova OOP\Debug\BuildLog.htm'
prova OOP - 2 errore/i, 0 avviso/i
========== Compilazione: 0 completate, 1 non riuscite, 0 aggiornate, 0 ignorate ==========

risolto ^^
ecco il main :
Codice:
#include "DarkGDK.h"
#include "player.h"

    void DarkGDK(void)
    {

    dbSyncOn   ( );
    dbSyncRate ( 60 );
    
    player Man;
        Man.Controlli();

    while ( LoopGDK ( ) )
    {
        dbSync ( );
    }

    return ;
    }
 
Rispondi
#12
Ecco, quelli che hai postato ora sono i classici errori di librerie esterne... con il passare del tempo imparerai ad odiarli XD (ricordo con ogre, per sistemarli ho fatto tanti di quei casini).

Leggendo su google ho visto che avevi ragione tu, darkgdk non usa la funzione main() (con la "m" minuscola, non maiuscola) come nel c++ normale, usa void DarkGDK().
Prova così (è probabile che l'errore persista, ma forse così è più giusto il main):
Codice:
#include "DarkGDK.h"
#include "player.h"
void DarkGDK()
    {
    
    dbSyncOn   ( );
    dbSyncRate ( 60 );
    
    player Man;
        Man.Controlli();

    while ( LoopGDK ( ) )
    {
        dbSync ( );
    }

    // return;  in teoria non dovrebbe servire, però vedo che lo mettono... se non funziona prova a metterlo

}


Comunque abituati all'idea di trovarlo spesso questo tipo di errore xD e il più delle volte non si risolve facilmente...
 
Rispondi
#13
grazie avevo gia risolto XD e sinceramente non so neanche come XDXD
 
Rispondi
  


Vai al forum:


Browsing: 1 Ospite(i)