@b Skrevet 15. mai 2003 Del Skrevet 15. mai 2003 Kan man bruke 'bool' om tabeller? Her er et eksempel: int Maks = 15; bool Ledig[Maks]; Jeg har også laget en klasse ved navn "navn": navn Navn[Maks]; Og så prøver jeg å overføre det til en funksjon (kaller den "Funksjon" i dette tilfellet): Funksjon(Ledig, Navn, Maks); Funksjonen ser slik ut: (Kompileringsfeil beskrevet etter "//") Funksjon(bool &Ledig, navn &Navn, int Maks) { ... bool OK = False; int Teller = 0; while (!OK) { if (Ledig[Teller] == False) OK = True; // subscript requires array or pointer type else Teller++; } if (OK) { Ledig[Teller] = True; // '=': left operand must be l-value } ... } Og i hovedprogrammet får jeg denne meldingen: Funksjon(Ledig, Navn, Maks) // cannot convert parameter 1 from 'bool[15]' to 'bool &' Hva er feil? Og kan jeg gjøre dette på en annen måte? Lenke til kommentar
christt Skrevet 15. mai 2003 Del Skrevet 15. mai 2003 Du har definert Ledig som er array med 15 "plasser", mens paramteren du sier du skal sende inn i funksjonen er av typen boolean. Når du sender inn Ledig som er et array får du problemer med typene. Hva prøver du egentlig å gjøre? Lenke til kommentar
kjetil7 Skrevet 16. mai 2003 Del Skrevet 16. mai 2003 Du sender (som nevnt over) en array av bool inn i funksjonen, men funksjonen er definert til å ta en referanse til en bool. Dette blir jo kluss, og kompilatoren vil klage.. Hvis du virkelig ønsker å gjøre det som det ser ut som, må du bytte ut referansen til bool med en peker; slik: void Funksjon(bool* ledig_, int maks_, Navn& navn_ ) { //... } eller slik: void Funksjon(bool ledig_[], int maks_, Navn& navn_ ) { //... } .. som stort sett blir det samme. Men dette er en svært gammeldags måte å gjøre det på (i C dager). Det er greit hvis du skal bruke det til å lære grunnleggende ting, men det er ikke slik vi programmerer c++ i dag... Et mer elegant eksempel kunne sett slik ut (forbehold om hva du prøver å gjøre..): void ElegantFunksjon(std::vector<bool>& ledig_, Navn& navn_) { std::vector<bool>::size_type maks = ledig_.size(); //... } Her bruker vi vector fra C++ sitt standard bibliotek. Mye sikrere og minimalt med overhead. Det er også vanlig å bruke en typedef for vectoren din slik at du ikke trenger å skrive så mye, slik: typedef std::vector<bool> BoolVectorType; void MestElegantFunksjon(BoolVectorType& ledig_, Navn& navn_) { BoolVectorType::size_type maks = ledig_.size(); //... } Håper dette ga svar på det du lurte på. Lenke til kommentar
@b Skrevet 16. mai 2003 Forfatter Del Skrevet 16. mai 2003 Jeg lærer grunnleggende programmering, ja. Jeg vil ha en tabell der alle elementene skal være klasser, og en tabell der alle elementene skal være typen bool. Og så vil jeg sende disse til en funksjon, IKKE kopiere dem. Er det da lovlig å definere dem slik: int Maks; bool Ledig[15]; navn Navn[15]; Jeg vil prøve denne funksjonen: void LageNyOppfoering(bool Ledig_[], navn& Navn, int Maks_) { //... bool OK = False; int Teller = 0; if (Ledig[Teller] == False) OK = True; Teller++; //... } Nå får jeg denne meldingen: "'Ledig' : undeclared identifier" i tillegg til de andre meldingene. Men hvordan skal jeg kalle opp funksjonen? Og hvordan kan jeg få det ene elementet i tabellen (bool Ledig) til å få verdien "True" (1) ? Lenke til kommentar
kjetil7 Skrevet 16. mai 2003 Del Skrevet 16. mai 2003 Er det da lovlig å definere dem slik: int Maks; bool Ledig[15]; navn Navn[15]; Helt riktig. Jeg vil prøve denne funksjonen: void LageNyOppfoering(bool Ledig_[], navn& Navn, int Maks_) { //... bool OK = False; int Teller = 0; if (Ledig[Teller] == False) OK = True; Teller++; //... } Nå får jeg denne meldingen: "'Ledig' : undeclared identifier" i tillegg til de andre meldingene. Her er det en enkel trykkleif.. Du har satt navnet på arrayen til Ledig_ i defenisjonen av funksjonen, mens inne i funksjonen bruker du Ledig (uten underscore til slutt). Det er et annet problem også. Hvis du ønsker å sende inn en array med Navn, må du skrive: Navn navn_[]. Et komplett fungerende eksempel kan se slik ut: #include <iostream> #include <string> class Navn { public: Navn() { } Navn(const std::string& navn_) { m_navn = navn_; } void setNavn(const std::string& navn_) { m_navn = navn_; } const std::string& getNavn() const { return m_navn; } private: std::string m_navn; }; void Funksjon(bool ledig_[], Navn navn_[], int maks_) { for(int i=0; i<maks_; i++) { ledig_[i] = false; navn_[i].setNavn("satt i funksjon"); } } int main() { const int array_size = 15; bool boolArray[array_size]; Navn navnArray[array_size]; Navn navn; //sette verdier i arrayene for(int i=0; i<array_size; i++) { boolArray[i] = false; navnArray[i].setNavn("verdi satt i main"); } //skrive ut navn arrayen std::cout << "FØR FUNKSJONSKALLET: " << std::endl; for(int i=0; i<array_size; i++) { std::cout << i << " : " << navnArray[i].getNavn() << std::endl; } //kaller oppe funksjonen Funksjon(boolArray, navnArray, array_size); //utskrift av array igjen.. std::cout << "ETTER FUNKSJONSKALLET: " << std::endl; for(int i=0; i<array_size; i++) { std::cout << i << " : " << navnArray[i].getNavn() << std::endl; } } ** klassenavnet her er med stor forbokstav, mens det i ditt eksempel var med liten. 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å