/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
BCC55 - Kompileringsfejl: Could not find m~
Fra : Niels Elken Sønderby


Dato : 15-12-01 13:10

Når jeg prøver at kompilere følgende program i Borland C++ 5.5
(gratisversionen), får jeg følgende fejlmeddelelse:

lilletest.cpp:
Error E2285 lilletest.cpp 21: Could not find a match for
'Window::Window(char *, Rect)'
*** 1 errors in Compile ***

I Turbo C++ 3.0 kompilerer programmet fint. Er der nogen, der kan forklare,
hvad der går galt for mig?

(Det er programmet fra
http://devcentral.iftech.com/articles/C++/intro_C++_CH/default.php jeg gerne
vil have til at virke. Programmet herunder er en reduceret version i et
forsøg på at isolere fejlen.)

Mvh. Niels

----
// lilletest.cpp

class Rect
{
public:
char top, bottom, left, right;

Rect( int x1, int y1, int x2, int y2 );
};

class Window: public Rect
{
protected:
char running;
public:
Window();

Window( char *s, Rect &r );
};

Window app( "Test", Rect(1, 1, 80, 24) );

int main() {
return 0;
}




 
 
Mogens Hansen (15-12-2001)
Kommentar
Fra : Mogens Hansen


Dato : 15-12-01 13:43


"Niels Elken Sønderby" <nielsx@bigfoot.com> wrote in message
>
> I Turbo C++ 3.0 kompilerer programmet fint. Er der nogen, der kan
forklare,
> hvad der går galt for mig?

Man kan ikke have en ikke const reference til et temporært objekt.

>
> class Rect
> {
> public:
> char top, bottom, left, right;
>

Det er almindeligvis ikke tilrådeligt at have public data-medlemmer.

> Rect( int x1, int y1, int x2, int y2 );
> };
>
> class Window: public Rect

Dette virker som decideret forkert design.
Du kunne ligeså godt skrive
class Window : public Rect,
public std::string
{
// ...
};

Window er _ikke_ et rektangel.
Den har nogle attributer:
* et rektangel der beskriver position og størrelse
* en tekst der beskriver navnet

Et bedre design vil være
class Window
{
public:
Window(const char* s, const Rect& r);

private:
Rect area;
std::string caption;
};

> {
> protected:
> char running;
> public:
> Window();

Giver det mening at have en default constructor ?

>
> Window( char *s, Rect &r );

skal ændres til
Window( const char *s, const Rect &r );

Venlig hilsen

Mogens Hansen



Niels Elken Sønderby (15-12-2001)
Kommentar
Fra : Niels Elken Sønderby


Dato : 15-12-01 14:52

"Mogens Hansen" <mogens_h@dk-online.dk> skrev:
> Man kan ikke have en ikke const reference til et temporært objekt.

Ahaa! Tak for hjælpen.

> Det er almindeligvis ikke tilrådeligt at have public data-medlemmer.

Jeg ved det, men sådan var eksemplet fra artiklen. Måske kunne det tyde på,
at koden ikke er så pædagogisk, som jeg håbede.

> > class Window: public Rect
>
> Dette virker som decideret forkert design.

Det er det garanteret også. I forhold til eksemplet fra artiklen, jeg
nævnte, har jeg sprunget over et niveau i hierakiet (nemlig Object), sådan
at koden, det ikke lykkedes mig at kompilere, var så kort som mulig.

> > public:
> > Window();
>
> Giver det mening at have en default constructor ?

Tjaa, jeg er ny i faget, så jeg ved det ikke. Mit gæt er dog, at du må have
ret.

> > Window( char *s, Rect &r );
>
> skal ændres til
> Window( const char *s, const Rect &r );

Tusind tak. Nu kompilerer det hele perfekt.

Også tak for dine kommentarer til klassehierakiet, selvom nogle af
særhederne skyldes, at programmet var skåret helt ind til benet.

Hvis du har tiden, må du gerne kommentere på, om artiklen på
http://devcentral.iftech.com/articles/C++/intro_C++_CH/default.php
er en god (meget basal) introduktion til GUI-OOP programmering.

Eller hvis du kender andre goder kilder (web eller lærebøger), vil jeg gerne
høre dem.

I øjeblikket prøver jeg at lære C++ fra C++ Primer, men der er inget om
GUI-programmering.

Hygge... Niels




Mogens Hansen (15-12-2001)
Kommentar
Fra : Mogens Hansen


Dato : 15-12-01 15:24


"Niels Elken Sønderby" <nielsx@bigfoot.com> wrote in message
> "Mogens Hansen" <mogens_h@dk-online.dk> skrev:

> > > class Window: public Rect
> >
> > Dette virker som decideret forkert design.
>
> Det er det garanteret også. I forhold til eksemplet fra artiklen, jeg
> nævnte, har jeg sprunget over et niveau i hierakiet (nemlig Object), sådan
> at koden, det ikke lykkedes mig at kompilere, var så kort som mulig.
>

Arver Rect fra Object ?
class Object ...
class Rect : public Object ...
class Window : public Rect ...

Hvad ligger der i Object ?
Det ser lidt subspekt ud. Det er dog ikke ualmindeligt at have Object som
basis-klasse.
Spørgsmålet er blot om det er nyttigt i C++. (Almindligvis mener jeg ikke at
det er nyttigt)

Jeg ville hellere have klasser som:
class Rect ...
class Window ...
class Button : public Window ...
class ListBox : public Window ...

>
> Hvis du har tiden, må du gerne kommentere på, om artiklen på
> http://devcentral.iftech.com/articles/C++/intro_C++_CH/default.php
> er en god (meget basal) introduktion til GUI-OOP programmering.
>

Desværre.
Man skal registreres for at se artiklen - det gider jeg simpelthen ikke.

> Eller hvis du kender andre goder kilder (web eller lærebøger), vil jeg
gerne
> høre dem.
>

Jeg vil da naturligvis anbefale
Accelerated C++: Practical Programming by Example
Andrew Koenig and Barbara E. Moo
ISBN: 0-201-70353-X
igen, igen (og undskylder til dem der er ved at være trætte at at se det)

og så naturligvis
The C++ Programming Language, Special Edition
Bjarne Stroustrup
ISBN 0-201-70073-5
bagefter

> I øjeblikket prøver jeg at lære C++ fra C++ Primer, men der er inget om
> GUI-programmering.
>

Hvis det er Stan Lippman & Josee Lajoie "C++ Primer, 3rd edition" vil jeg
tro du er i gode hænder.

C++ har ikke noget GUI bibliotek, så man skal finde en måde uden for C++
Standard Library at gøre det på.
Der findes mange muligheder, hvor parametre som f.eks.
* understøttede platforme
* udviklingsværktøjer
* indlæringskurve
* performance (f.eks. memory, run-time, udviklingshastighed)
* pris
* tilgængelig litteratur
spiller en rolle.

Venlig hilsen

Mogens Hansen





Niels Elken Sønderby (15-12-2001)
Kommentar
Fra : Niels Elken Sønderby


Dato : 15-12-01 15:50

"Mogens Hansen" <mogens_h@dk-online.dk>:
> Arver Rect fra Object ?
> class Object ...
> class Rect : public Object ...
> class Window : public Rect ...

Nej, omvendt. Citat fra artiklen:
"The Object class inherits from the Rect class (you could argue that the
object class should be the base class and it should have a "uses a"
relationship with the Rect class as opposed to the "is a" relationship found
in this hierarchy - that is good reasoning, so change the hierarchy if you
like)."

> Hvad ligger der i Object ?

Nu får du lige Rect, Object og Window (incl. manglende const'er ):

class Rect
{
public:
char top, bottom, left, right;

Rect();
Rect( int x1, int y1, int x2, int y2 );
char Height();
void SetSize( Rect &r );
char Width();
};

class Object: public Rect
{
protected:
char *title;
char takesFocus;
char focused;
Screen screen;

public:
Object();
Object( char *s, Rect &r );
~Object();
char AcceptsFocus();
virtual void Draw();
virtual void HandleEvent( Event &event );
virtual void ReleaseFocus();
virtual void SetFocus();
virtual void SetTitle( char *s );
};

class Window: public Object
{
protected:
ObjectList list;
char running;
public:
Window();
Window( char *s, Rect &r );
~Window();
int Close();
virtual void Draw();
void Execute();
virtual void HandleEvent( Event &event );
void Insert( Object *obj );
void MoveFocus( char direction );
void Remove( Object *obj );
char WindowRunning();
};

> Det ser lidt subspekt ud. Det er dog ikke ualmindeligt at have Object som
> basis-klasse.

Passer jo glimrende med ovenstående citat.

> Spørgsmålet er blot om det er nyttigt i C++. (Almindligvis mener jeg ikke
at
> det er nyttigt)
>
> Jeg ville hellere have klasser som:
> class Rect ...
> class Window ...
> class Button : public Window ...
> class ListBox : public Window ...

OK, jeg vil tage dit synspunkt med mig, når jeg engang skal bevæge mig ud i
at vælge et specifikt (og rigt) toolkit.

> Man skal registreres for at se artiklen - det gider jeg simpelthen ikke.

Det forstår jeg godt. Enormt irritationsmoment disse registreringer.

> Jeg vil da naturligvis anbefale
> Accelerated C++: Practical Programming by Example
> igen, igen (og undskylder til dem der er ved at være trætte at at se det)

Jeg har set den anbefalet en del gange i denne grupper. (Vist også af andre
end dig. ). Det kan være, at jeg skulle overveje at købe den.

> The C++ Programming Language, Special Edition
> Bjarne Stroustrup
> bagefter

Selvfølgelig den ultimative udtømmende bog, men stadig for svær til mig, så
det bli'r "bagefter"...

> Hvis det er Stan Lippman & Josee Lajoie "C++ Primer, 3rd edition" vil jeg
> tro du er i gode hænder.

Det er det. Glimrende bog. En ting, jeg godt kan lide, er, at den går
direkte til C++, fremfor at insistere på at lære én C først.

> C++ har ikke noget GUI bibliotek, så man skal finde en måde uden for C++
> Standard Library at gøre det på.
> Der findes mange muligheder, hvor parametre som f.eks.
> * understøttede platforme
> * udviklingsværktøjer
> * indlæringskurve
> * performance (f.eks. memory, run-time, udviklingshastighed)
> * pris
> * tilgængelig litteratur
> spiller en rolle.

Ja, jeg overvejer måske at vælge Qt eller wxWindows, da det både findes til
Windows og Linux. Jeg er blot lidt nervøs for, at det er et for stort
spring, så jeg har også overvejet at starte med TOAD (desværre kun Linux)
eller V.

http://www.trolltech.com/products/qt/index.html
http://www.wxwindows.org/
http://www.mark13.de/toad/
http://www.objectcentral.com/

Jeg er lidt til Open Source, da jeg dels ikke vil ofre mange penge, dels
mener, at man langt nemmere får hjælp i nyhedsgrupper m.v., hvis man bruger
et Open Source bibliotek. Derudover kan man jo også se, hvordan det fungerer
inde under overfladen.

Hej igen... Niels




Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste