Nightfall Skrevet 18. mars 2004 Del Skrevet 18. mars 2004 (endret) 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 18. mars 2004 av Nightfall Lenke til kommentar
frg Skrevet 18. mars 2004 Del Skrevet 18. mars 2004 (endret) 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 18. mars 2004 av frg Lenke til kommentar
A_N_K Skrevet 18. mars 2004 Del Skrevet 18. mars 2004 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
Nightfall Skrevet 18. mars 2004 Forfatter Del Skrevet 18. mars 2004 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
Herr_Dude Skrevet 19. mars 2004 Del Skrevet 19. mars 2004 (endret) 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 19. mars 2004 av Herr_Dude Lenke til kommentar
frg Skrevet 19. mars 2004 Del Skrevet 19. mars 2004 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
Nightfall Skrevet 19. mars 2004 Forfatter Del Skrevet 19. mars 2004 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
☀ ❄ Skrevet 19. mars 2004 Del Skrevet 19. mars 2004 Jeg vil strengt tatt anbefale deg å lese en bok. Du må lære deg om pekere (pointers), som du har vært så "heldig" å bli beskyttet mot i Java. Lenke til kommentar
Nightfall Skrevet 19. mars 2004 Forfatter Del Skrevet 19. mars 2004 Selvfølgelig skal jeg kjøpe en bok, men det har seg dessverre slik at de koster penger , noe jeg er litt tom for i øyeblikket, så jeg må nok nøye meg med internett en stund til... Noen bøker å anbefalle forresten? Lenke til kommentar
søppel Skrevet 19. mars 2004 Del Skrevet 19. mars 2004 (endret) #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 19. mars 2004 av søppel Lenke til kommentar
☀ ❄ Skrevet 19. mars 2004 Del Skrevet 19. mars 2004 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå