Gå til innhold

Anbefalte innlegg

Jeg har tidligere programmert en del i JAVA, og er dreven på objektorientert programmering, men når jeg nå prøver å gå over til C++, er det ingen ting som fungerer. Hvis noen kan forklare med hva jeg gjør feil i det korte eksempelet under, ville jeg vært evig takknemmelig!

 

Jeg har laget disse 2 klassene, som en del av et større prosjekt, men får en drøss med kompileringsfeil.

 

class Navn
{
private:
       String navn;
public:
       Navn(String nyttNavn); {navn = nyttNavn}
}

 

og

 

class Person
{
private:
       Navn mittNavn;
public:
       Person(String nyttNavn); {mittNavn = new Navn(nyttNavn)}
};

 

Jeg tror de fleste feilene jeg får vil løse seg når jeg klarer å forklare programmet at variabelen mittNavn egentlig er et objekt av typen Navn, men det ser ikke C++ ut til å ville godta. Selv om jeg fjerner all overflødig kode, godtar den ikke variabler/referanser av andre typer enn de primitive datatypene.

 

Jeg har lest MANGE tutorials på nettet, som alle sier at jeg skal opprette nye objekter på denne måten:

Person megSelv;
megSelv = new Person();

men dette får jeg rett og slett ikke til å fungere...

 

Noen som kan hjelpe??? PLZ!?

 

EDIT: Hvis noen lurte, bruker jeg Borland C++ Builder 6.0 Enterprise Suite som editor

Endret av Nightfall
Lenke til kommentar
Videoannonse
Annonse

Du kan ikke ha semikolon etter deklerasjon av navn og person i henholdsvis Navn og Personklassen og så må du ha en kolon tilslutt på Navnklassen.

 

Det skal være:

 

Navn(String nyttNavn) {navn = nyttNavn}

Endret av frg
Lenke til kommentar

Du har glemt å terminere Navn med semikolon, litt teit, men nødvendig i C++. Du må derimot ikke terminere funksjonsprototypen med semikolon før kroppen følger. Når du allokerer megSelv med new, får du en peker. Pekere til Person deklarerer du med Person * (altså Person *megSelv = new Person()). I dette tilfellet kunne du klart deg med Person megSelv, hvor du oppretter et objekt på stacken, med mindre du absolutt trenger et dynamisk allokert objekt. Håper dette hjalp.

Lenke til kommentar

ok... Jeg er nå nede i kun 6 kompileringsfeil på disse 2 svært enkle klassene:

1: class Navn
2: {
3: private:
4:        String navn;
5: public:
6:         Navn(String nyttNavn) {navn = nyttNavn}
7: };

og

1: class Person
2: {
3: private:
4:         Navn navn;
5: public:
6:         Person(String nyttNavn) {navn = new Navn(nyttNavn)}
7: };

Her er felene:

Person linje 4: Type name expected

Person linje 4: Declaration missing ;

Person linje 6: ) expected

Person linje 7: Declaration terminated incorrectly

Person linje 7: Unexpected }

Person linje 7: Unexpected } (Joda... Denne kom 2 ganger)

 

Noen flere gode forslag? Hvordan får jeg 2 klasser til å snakke sammen?

Lenke til kommentar

Du må include navne klassen i person klassen

 

#include "Navn.h"

 

på toppen av klassen, slik at klassen Person kjenner til typen Navn ( evt legge koden rett foran Person klassen din om du skal ha de i samme fil ).

 

Edit: Skriveleif

Endret av Herr_Dude
Lenke til kommentar

Du må semikolon etter deklarasjonene navn = nyttnavn; og navn = new Navn();

 

og så må du bruke noe alla: *navn = new Navn(nyttNavn);

 

Navn(String nyttNavn) { navn = nyttNavn; }

 

Person(String nyttNavn) { navn = new Navn(nyttNavn); }

Lenke til kommentar

Hmm... mye forvirrende motsigende informasjon synes jeg...

 

Noen steder får jeg høre at man ikke skal bruke ordet new, andre steder sier jeg skal. Noen sier jeg skal inkludere "Navn.h", andre mener dette ikke er nødvendig. Og hva er så egentlig denne "Navn.h"? Jeg har ikke laget noen slik fil. Genereres den automatisk?

 

plz! Jeg er totalt noob på c++, men kan objektorientering. Jeg trenger bare å vite litt om basic notasjon i c++. Hvis noen som kan dette kunne gi meg noen oppklarende svar hadde det vært kjempefint!

Lenke til kommentar

#include <iostream>
#include <string>


class Navn {
public:
Navn(std::string navn_)
{
 navn = navn_;
}

std::string navn;
}; // class Navn

std::ostream& operator<<(std::ostream& os, Navn const& navn)
{
os << navn.navn;
return(os);
} // operator<<()


class Person {
public:
Person(std::string navn_)
 :navn(navn_)
{  
}

Navn navn;
}; // class Person



int main()
{
using namespace std;

Person soppel("søppel");
cout << soppel.navn << endl;

return(0);
} // main()

 

..skaff deg en bok.

 

"The C++ Programming Language"; No-nonsence .. rett-på-sak bok.

Endret av søppel
Lenke til kommentar

Jeg vet om minst to gratis bøker i elektronisk format:

 

Teach yourself C++ in 21 days; lett og enkel, men litt gammel bok. (google funker bra her)

 

Thinking in C++, vol 1 & 2; litt tyngre, men mer grundig og ordentlig bok. (www.mindview.net)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...