/ 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
C++ nedarvning
Fra : Allan Eriksen


Dato : 05-04-03 16:03

Hej..
...har problemer med nedarvning i c++, og har derfor lavet en kraftig
forsimpling af mit kode, så I kan hjælpe mig med mit problem. Koden ser
således ud:

#include <string>

class Animal{
public:
bool miaw(string lyd){
cout << lyd << endl;
}
};

class Kat : public Animal{
public:
};

int main(void){
bool miaw(string lyd){
cout << lyd << endl;
}
Kat katze();
katze.miaw("Muhhh");
return(0);
}

Og kompileren melder følgende fejl:

osis@osis2 log]$ g++ -Wall -o test test.cpp
test.cpp: In function `int main ()':
test.cpp:16: request for member `miaw' in `katze', which is of
non-aggregate type `Kat () ()'

Jeg har prøvet alt hvad der står i min magt, men må give op, selvom jeg
tror og håber at problemet er ret simpelt!

På forhånd tak!
mvh.
Allan

 
 
Jacob Bunk Nielsen (05-04-2003)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 05-04-03 16:11

Allan Eriksen <holst@control.auc.dk> writes:

> int main(void){
> bool miaw(string lyd){
> cout << lyd << endl;
> }

Det er en tastefejl, ikke?

> Kat katze();

Du vil nok:

Kat katze = Kat();

?

--
Jacob - www.bunk.cc
You're out of memory

Allan Eriksen (05-04-2003)
Kommentar
Fra : Allan Eriksen


Dato : 05-04-03 16:25

On Sat, 05 Apr 2003 15:11:18 +0000, Jacob Bunk Nielsen wrote:

> Allan Eriksen <holst@control.auc.dk> writes:
>
>> int main(void){
>> bool miaw(string lyd){
>> cout << lyd << endl;
>> }
>> }
> Det er en tastefejl, ikke?
>
>> Kat katze();
>
> Du vil nok:
>
> Kat katze = Kat();
>
> ?

Heheh..sorry! Har postet noget forkert kode. De tre første linier i main
skal slettes, således at main() kommer til at se således ud:

int main(void){
Kat katze=Kat();
katze.miaw("Muhhh");
return(0);
}

Håber at I ikke er alt for forvirrede :)

Jacob Bunk Nielsen (05-04-2003)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 05-04-03 16:23

Allan Eriksen <holst@control.auc.dk> writes:

> Heheh..sorry! Har postet noget forkert kode. De tre frste linier i main
> skal slettes, sledes at main() kommer til at se sledes ud:
>
> int main(void){
> Kat katze=Kat();
> katze.miaw("Muhhh");
> return(0);
> }

Ja, det oversætter fint her hos mig

$ g++ --version
2.96

--
Jacob - www.bunk.cc
We already sent around a notice about that.

Allan Eriksen (05-04-2003)
Kommentar
Fra : Allan Eriksen


Dato : 05-04-03 16:29

On Sat, 05 Apr 2003 15:11:18 +0000, Jacob Bunk Nielsen wrote:

>
> Du vil nok:
>
> Kat katze = Kat();
>
> ?

Tak for hjælpen, nu virker det! Men jeg har lige et ? mere: Hvad er forskellen på:

Kat katze();

og

Kat katze = Kat();

Mener at jeg før har brugt den første instantieringsmetode uden probs!

mvh
Allan

Jacob Bunk Nielsen (05-04-2003)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 05-04-03 16:36

Allan Eriksen <holst@control.auc.dk> writes:

> Tak for hjlpen, nu virker det! Men jeg har lige et ? mere: Hvad er
> forskellen p:
>
> Kat katze();

Uden at jeg lige er for sikker, så er ovenstående en forward-erklæring
af en funktion katze() som returnerer Kat.

> Kat katze = Kat();

Her har du et Kat objekt som du initialiserer ved at kalde
contructoren for Kat-klassen.

> Mener at jeg fr har brugt den frste instantieringsmetode uden probs!

Hmmm

--
Jacob - www.bunk.cc
The greatest of faults is to be conscious of none.

Kent Friis (05-04-2003)
Kommentar
Fra : Kent Friis


Dato : 05-04-03 17:09

Den Sat, 05 Apr 2003 17:35:48 +0200 skrev Jacob Bunk Nielsen:
>Allan Eriksen <holst@control.auc.dk> writes:
>
>> Tak for hjlpen, nu virker det! Men jeg har lige et ? mere: Hvad er
>> forskellen p:
>>
>> Kat katze();
>
>Uden at jeg lige er for sikker, så er ovenstående en forward-erklæring
>af en funktion katze() som returnerer Kat.

Korrekt, men:

>> Kat katze = Kat();

Hvorfor ikke bare:

Kat katze;

Mvh
Kent
--
F0 0F C7 C8 - Intel Pentium bug

Jacob Bunk Nielsen (05-04-2003)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 05-04-03 16:41

Jacob Bunk Nielsen <spam@bunk.cc> writes:

> Uden at jeg lige er for sikker, så er ovenstående en forward-erklæring
> af en funktion katze() som returnerer Kat.

Ja, her et lille eksempel:

int main(void){
Kat katze();
Kat k = katze();
k.miaw("Muhhh");
return(0);
}

Kat katze() {
return Kat();
}

Dette går godt. Fjerner man første linje i main(), så siger
compileren:

$ g++ -Wall -o foo foo.cpp
foo.cpp: In function `int main ()':
foo.cpp:15: `katze' undeclared (first use this function)
foo.cpp:15: (Each undeclared identifier is reported only once for each
function it appears in.)
foo.cpp: In function `Kat katze ()':
foo.cpp:20: `Kat katze ()' used prior to declaration

--
Jacob - www.bunk.cc
Kiss me twice. I'm schizophrenic.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste