Newsgroup: it.comp.lang.c++
Titolo: Problema con costruttore

ragazzi ho un problema con un costruttore
in una classe ho un costruttore
in un'altra classe ho un puntatore alla classe con il costruttore
e quando faccio la new al puntatore, xche' mi servono i dati da quella classe, viene invocato il costruttore
ma il compilatore mi dice : undefined reference to `Level_data::Level_data(void)'
ed a dire il vero non capisco il motivo qualcuno puo'
illuminarmi?
nei testi che ho guardato non c'e' scritto niente oppure ho
cercato male
ciao

 cercato male
Codice ??
Facci vedere...

 ha scritto nel messaggio
news:pan.2003.08.02....@gameprog.it...

Significa che non riesce a trovare il codice per il costruttore di default:
tu sicuramente ne hai definito uno che prende degli argomenti. Per risolvere
o definisci un costruttore di default (senza argomenti) oppure assegni dei
valori di default per il costruttore che hai già definito, ad esempio se il
costruttore che hai definito prende un int:
class MyClass {
public:
    Ctor(int val = 0) { ... }
...
};
In questo modo quando dichiari:
MyClass mc1(10);
viene richiamato il costruttore passandogli l'argomento 10, altrimenti:
MyClass mc2;
viene richiamato il costruttore con argomento di default 0, lo stesso in
questo caso:
MyClass *mcpt = new MyClass;
Ciao

 MyClass *mcpt = new MyClass;
Ciao wonderboy,
adesso non posso provare il codice xche' non sono a casa mia... xo' io ho
dichiarato tutto come segue:
level_data.h
class Level_data : public EasySDL
{
    public:
       Level_data();
}
level_data.cpp
Level_data::Level_data()
{
// implementazione
}
game.h
#include "level_data.h"
class game : public EasySDL
{
        Level_data *muri;
}
game.cpp
....
 muri = new Level_data();
spero che cosi' sia piu' chiaro
grazie per l'aiuto

 
L'errore che hai riportato non è del compilatore, ma del linker.
Probabilmente non stai linkando il file oggetto corrispondente a 
level_data.cpp (level_data.o).
Max

 level_data.cpp (level_data.o).
ieri sera, nella classe, ho provato a far cosi'
class Level_data : public EasySDL
{
    public:
      Level_data() { };
}
e tutto sembra funzionare \-:

 che include pacman.h sprites_data.h level_data.h
Che compilatore usi? Come fai a compilare pių file per ottenere un
eseguibile?

 eseguibile?
uso g++
adesso non ricordo i parametri passati al compilatore xche' ho fatto un
Makefile quando mi e' servito...
cmq dovrebbe esser qualcosa tipo:
g++ -Wall 'sdl-config --libs --include' -O2 (qualche altra opzione) main.cpp
pacman.cpp

> main.cpp e pacman.cpp
Nel tuo messaggio menzionavi anche level_data.cpp e game.cpp. Che ne è di 
questi?
Se hai un "undefined reference" vuol dire che un certo simbolo o non è 
proprio definito o è definito in un file oggetto che non viene però incluso 
nel linking. Controlla bene il tuo Makefile.
Max

 nel linking. Controlla bene il tuo Makefile.
entro questa sera vedro' di lanciare il comando da bash e provare a
compilare anche level_data.h... sperando che cambi qualcosa

 compilare anche level_data.h... sperando che cambi qualcosa
niente da fare...
qui' ho dei dato che possono aiutarci a capire che succede ... almeno lo
spero
-------- pacman.cpp ------------
#include <iostream>
#include <fstream>
#include "pacman.h"
/////////////////////////////////////////////////////////////////////
........
........
    muri = new Level_data;
    muri->screen = monitor->screen;
    muri->LoadImg("images/level.bmp");
....
....
void PacMan::MakeLevel()
{
  for ( int i = 0; i <= 299; i++ )
  {
    switch ( muri->data[i].type )
    {
      case 1:
        muri->ShowImg(2, 5, 16, 2, muri->data[i].x, muri->data[210].y, 16,
2);
        break;
      case 2:
        muri->ShowImg(2, 5, 16, 2, muri->data[i].x, muri->data[i].y, 16, 2);
        break;
    }
  }
}
----------- pacman.h --------------
#include "EasySDL.h"
#include "sprites_data.h"
#include "level_data.h"
/////////////////////////////////////////////////////////////////////
class PacMan : public EasySDL
{
  public:
    Sprites_data *pacman;
    Level_data   *muri;
};
/////////////////////////////////////////////////////////////////////
---------  sprites_data.h ---------
class Sprites_data : public EasySDL
{
  public:
    short x, y;
short src_x;
bool  spr_par;
};
/////////////////////////////////////////////////////////////////////
----------- level_data.h -----------
typedef struct _wall_data
{
  short x, y;
  short type;
};
class Level_data : public EasySDL
{
  private:
    static short level[20][15];
  public:
    Level_data();
   ~Level_data();
  public:
    short src_x;
    _wall_data data[300];
};
/////////////////////////////////////////////////////////////////////
----------- level_data.cpp -----------
#include "level_data.h"
short Level_data::level[20][15] =
{
..........
};
Level_data::Level_data()
{
  int id = 0;
  for ( int i = 0; i <= 19; i++ )
  {
    for ( int j = 0; j <= 14; id++, j++ )
    {
      switch ( Level_data::level[i][j] )
      {
        case 0:
          break;
       case 1:
          break;
        case 2:
          break;
      }
    }
  }
}
Level_data::~Level_data()
{
    delete []Level_data:level;
}
Speriamo bene ((:

Problema risolto... sembra essere un problema di include

 main.cpp pacman.cpp
non ho mai usato le sdl e non so cosa sia sdl-config, ma credo che sia
*estremamente* probabile che ci vadano gli apici inversi:
    g++ -Wall `sdl-config --libs --include` -O2 ...
cmq chiudo qui l'OT, in quanto gli apici inversi c'entrano ben poco con il
C++.
ciao Anto
-- 
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra

 ciao Anto
hehehehe ho trovato il problema ((:
cmq non riuscivo a fare gli apici inversi xche' ero dal pc della
famiglia della mia ragazza che usano windows \-: