Avatar billede gnyff Nybegynder
07. november 2002 - 18:54 Der er 29 kommentarer og
4 løsninger

size of class undefined

Jeg sidder med en class til en cpp fil. og på linien hvor jeg skriver
void bog.setBog(){
        title = tittel;
        Forfatter = forfat;
        Forlag = forl;
        udgaar = udgar;
        isbnnummer = isbn;

får jeg fejl "size of 'bog' is unknown or zero"

min class fil "bog.h" ser sådan ud

#include <iostream.h>
#include <string>
using namespace std;

class bog
{
    private:
        string tittel;
    string forfatter;
    string forlag;
    int udgivelsesaar;
    string isbn;
    public:
        string setBog();
    void setBog(string _titel);
    getBog();
    getBog(string titel, string forfatter, string forlag, string udgivelseaar, string isbn);

    bool isbnkonrol(string isbnnr);
};

hvad er der galt med koden? Eller er det borland c++ compiler der ikke kan takle koden?
Avatar billede soreno Praktikant
07. november 2002 - 19:15 #1
jeg synes ikke at kunne se at du definerer en void setBog(); i din .h fil - hvor kommer den fra ?
Avatar billede gnyff Nybegynder
07. november 2002 - 19:18 #2
Øhhh, hvordan mener du.

Jeg er i gang med at lære c++, men hvordan definere jeg void setBog(); ???
Avatar billede soreno Praktikant
07. november 2002 - 19:23 #3
i din .cpp fil implementerer du:
void bog.setBog(){
..

men du definerer den ikke i din .h fil

der er forskel på:
string setBog();

og
void setBog(string _titel);

iøvrigt er det en dårlig ide at navngive dine variabler med "_" foran - en del "system" variabler bruger denne navnekonvention.
Avatar billede mbulow Nybegynder
07. november 2002 - 19:55 #4
Forskellige ting som jeg lige hurtigt kan nævne er forkerte:

1) I din cpp-fil implementerer du som soreno siger void setBog(), men den findes ikke i din h-fil.

2) Når du definerer setBog i cpp-filen skriver du:
  void bog.setBog()
Det skal være:
  void bog::setBog()
Jeg er sikker på at det er her din "size of 'bog' is unknown or zero"-fejl opstår.

3) Nu ved jeg ikke om det bare er fordi du har skrevet hurtigt når du har skrevet dit spørgsmål, men det ser lidt ud som om du har nogle problemer med dine variabelnavne... Næsten alle steder hvor du skriver et variabelnavn er de forskellige... Kan selvfølgelig godt være at de rent faktisk er forskellige men jeg tvivler nu lidt ;) hehe
PS!!! Husk at der er forskel på store/små bogstaver. Altså, Forfatter og forfatter er to forskellige variabelnavne.


Prøv lige at poste alt hvad der står i din cpp og h fil... Så kan en eller anden eventuelt rette dem igennem og fortælle dig hvordan de skal se ud.
Avatar billede gnyff Nybegynder
08. november 2002 - 07:58 #5
I min bog.cpp:
#include <iostream.h>
#include <string>
#include "bog.h"
using namespace std;


void main()
{
    cout << "\033[2J";

    char valg;
    cout<<"Traef et valg: \n o = Opret \n t = Tjek"<<endl;
    cin>>valg;


        char tittle;
        char forfat;
        char forl;
        int udgar;
        char isbnnummer[8];
        int isbn;

switch (valg){
    case 'o':
    cout<<"Bogens title : ";
    cin>>tittle;
    cout<<endl;
   
    cout<<"Bogens forfatter : ";
    cin>>forfat;
    cout<<endl;
   
    cout<<"Bogens forlag : ";
    cin>>forl;
    cout<<endl;
   
    cout<<"Bogens udgivelsesaar : ";
    cin>>udgar;
    cout<<endl;
   
    cout<<"ISBN nummer (8 tal) : ";
    cin>>isbn;
    cout<<endl;
    if((isbnnummer[1]+isbnnummer[2]+isbnnummer[3]+isbnnummer[4]+isbnnummer[5]+isbnnummer[6]+isbnnummer[7]+isbnnummer[8]) == 44){
        cout<<"Data skrevet i fil"<<endl;
       
    void bog.setBog(){
        title = tittel;
        Forfatter = forfat;
        Forlag = forl;
        udgaar = udgar;
        isbnnummer = isbn;
    };

   
        }else{
        cout<<"ISBN nummer er ikke sandt"<<endl;
   
    }

   
    break;
    case 't':
       
    void bog.getBog(){
        cout<<"titel        : "<<title<<endl;
        cout<<"Forfatter    : "<<Forfatter<<endl;
        cout<<"Forlag        : "<<Forlag<<endl;
        cout<<"Udgivelsesaar : "<<udgaar<<endl;
        cout<<"ISBN nummer  : "<<isbnnummer<<endl;
};
       
default:
    cout<<"Du har ikke truffet noget valg!!!"<<endl;

}

}

Og i min bog.h:
#include <string>
using namespace std;

class bog
{
    private:
        string tittel;
    string forfatter;
    string forlag;
    int udgivelsesaar;
    string isbn;
    public:
        string getTitel();
    void setTitel(string _titel);
    bog();
    bog(string titel, string forfatter, string forlag, string udgivelseaar, string isbn);

    bool isbnkonrol(string isbnnr);
};

Jeg har lidt problemmer med at forstå alt det med class. Vi har skulle læse en bog der hedder "computing using c++ and object technology" med ford og topp, og jeg har læst meget i den, men jeg har stadig ikke forstået hvordan man bruger classer.
Avatar billede soreno Praktikant
08. november 2002 - 09:06 #6
kan du ikke prøve at arbejde videre med dette lille eks:

------------Bog.cpp-------------
#include <string>
#include "Bog.h"

Bog::Bog()
{
}

Bog::~Bog()
{
}

void Bog::setTitle(string newTitle)
{
    title = newTitle;
}

string Bog::getTitle()
{
    return title;
}

------------Bog.h---------------
#ifndef BOG_H
#define BOG_H
#include <string>

class Bog
{
    public:
        Bog(); //konstruktør
        ~Bog(); //destruktør
        void setTitle(string newTitle);
        string getTitle();

    private:
        string title;
};

#endif

------------main.cpp------------
#include <iostream>
#include <string>
#include "Bog.h"

using namespace std;

int main(int argc, char **argv)
{
    Bog bog1;
    bog1.setTitle("The Odyssey of Homer");

    Bog *bog2;
    bog2 = new Bog(); //alloker ram til et bog objekt
    bog2->setTitle("The Canterbury Tales");

    cout << "Biblioteket indeholder:" << endl;
    cout << bog1.getTitle() << endl;
    cout << bog2->getTitle() << endl;
   
    delete bog2; //slet det allokerede ram
   
    return 0;
}
Avatar billede gnyff Nybegynder
08. november 2002 - 11:33 #7
Når, jeg køre din kode gennem compileren skriver den:
Error E2293 c:\cpp\bog.h 10: ) expected
Error E2293 c:\cpp\bog.h 11: ) Type name expected
Error E2293 c:\cpp\bog.h 14: ) Declaratain for 'Bog::string'
Error E2293 c:\cpp\bog.h 14: ) Multiple declaring of Bog::String
Error E2293 c:\cpp\bog.h 11: ) Earlier declaration of Bog::string
Error E2293 c:\cpp\bog.h 14: ) Declaration missing ;
Error E2293 c:\cpp\bog.h 12: ) Undefined symbol 'string'
** 8 Errors in compile ***
Avatar billede soreno Praktikant
08. november 2002 - 11:49 #8
hvordan har du kompileret ?
og bruger du kommandolinie værktøjet til at kompilere eller ?
Avatar billede gnyff Nybegynder
08. november 2002 - 13:20 #9
Jeg har borland compiler 55, og når jeg compiler går jeg ud i ms-dospromp, og skriver bcc32 c:\cpp\bog.cpp
Avatar billede mbulow Nybegynder
08. november 2002 - 19:06 #10
Kunne godt forestille mig at det var pga. af 'using namespace std'

Flyt den fra main.cpp filen til bog.h filen...
Indsæt den lige under #include <string>

Altså:
------

main.cpp:
---------

#include <iostream>
#include <string>
#include "Bog.h"

int main(int argc, char **argv)
{
// En masse kode
}


Bog.h:
------

#ifndef BOG_H
#define BOG_H
#include <string>

using namespace std;

class Bog
{
// En masse kode
}

#endif
Avatar billede gnyff Nybegynder
10. november 2002 - 12:41 #11
Nop, samme fejl.

Kan det have noget med Compileren at gøre???
Avatar billede mbulow Nybegynder
10. november 2002 - 14:59 #12
Hmm...
Hvis du opretter følgende filer (Bog.cpp Bog.h og main.cpp) med følgende indhold:

Bog.cpp:
--------
#include <string>
#include "Bog.h"

Bog::Bog()
{
}

Bog::~Bog()
{
}

void Bog::setTitle(string newTitle)
{
    title = newTitle;
}

string Bog::getTitle()
{
    return title;
}



Bog.h:
------
#ifndef BOG_H
#define BOG_H
#include <string>

using namespace std;

class Bog
{
    public:
        Bog(); //konstruktør
        ~Bog(); //destruktør
        void setTitle(string newTitle);
        string getTitle();

    private:
        string title;
};

#endif



main.cpp:
---------
#include <iostream>
#include <string>
#include "Bog.h"

int main(int argc, char **argv)
{
    Bog bog1;
    bog1.setTitle("The Odyssey of Homer");

    Bog *bog2;
    bog2 = new Bog(); //alloker ram til et bog objekt
    bog2->setTitle("The Canterbury Tales");

    cout << "Biblioteket indeholder:" << endl;
    cout << bog1.getTitle() << endl;
    cout << bog2->getTitle() << endl;
   
    delete bog2; //slet det allokerede ram
   
    return 0;
}



Bagefter kompilerer JEG med:
  bcc32 c:\cpp\bog.cpp
og der kommer ikke nogle af de fejl du får, og fejlen var pga. using namespace std; der stod et forkert sted



PS!!! En noget rarere kompiler at arbejde med er Dev-C++
Download den fra www.bloodshed.net... Den nyeste beta virker helt fint, jeg har ihvert fald ikke fundet fejl endnu :)
Alt det der kommandoprompt nusseri med BCC55 var da ihvertfald nok til at jeg var ved at blive skingrende sindsyg :))
Avatar billede soepro Nybegynder
11. november 2002 - 10:12 #13
gnyff >> Du laver så vidt jeg kan se det et par små fejl:

1) Når du definerer din variabel, dvs. den aktuelle "anvendelse" af din bog-klasse.
#include "bog.h" // For at du kan bruge din nye bog-klasse.
bog minBog();

2) Implementeringen af constructoren, setteren og getteren.
Du skal sørge for at de variabler der bliver overført til funktionen, hedder noget andet end dem der bliver gemt i selve klassen - ellers kan compileren ikke skelne mellem dem. Ligeledes er syntaksen i definitionen af klassens memberfunktioner lidt forkert - skilletegnet er ':' (kolon), ikke '.' (punktum)

void bog::bog(string vtitel, string vforfatter, string vforlag, string vudgivelseaar, string visbn)
{
  titel = vtitel;
  forfatter = vforfatter;
  forlag = vforlag;
  udgivelsesaar = vudgivelsesaar;
  isbn = visbn;
}
Avatar billede cynosure Nybegynder
11. november 2002 - 10:20 #14
Hvad der allerede er blevet skrevet er :
Du mangler din Constructor ! (Selvom du default får en Constructor, afhænger det af compileren)

Du benytter 2 metoder, som ingen returværdi har.. Jeg ved ikke om det er dem du betrager som din Default Constructor og overloadede Constructor.. I så fald skal de have samme navn som din klasse navn
Avatar billede gnyff Nybegynder
12. november 2002 - 10:03 #15
OK, jeg fatter bare mindre og mindre af hvad der bliver skrevet.

Jeg har forstået at der er en hulens masse fejl, n uhar jeg lavet classer i 2 uger, men jeg har stadig ikke fået nogen af dem til at virke, er der ikke en af jer der gider foklare mig hvordan man laver en classe og komme med et godt forslag til hvordan jeg får løst in opgave???

Jeg går på c++ kursus fordi jeg gerne vil lære at programmere i c++, så der er nok nogen af jer der kommer til at tjene en masse point på mig.

Jeg er kommet frem til koden:

bog.cpp (selve programmet)
#include <iostream.h>
#include <string>
#include "bog.h"
using namespace std;


int main()
{
    cout << "\033[2J";

    char valg;
    cout<<"Traef et valg: \n o = Opret \n t = Tjek"<<endl;
    cin>>valg;


        char tittle;
        char forfat;
        char forl;
        int udgar;
        char isbnnummer[8];
        int isbn;

switch (valg){
    case 'o':
    cout<<"Bogens title : ";
    cin>>tittle;
    cout<<endl;
   
    cout<<"Bogens forfatter : ";
    cin>>forfat;
    cout<<endl;
   
    cout<<"Bogens forlag : ";
    cin>>forl;
    cout<<endl;
   
    cout<<"Bogens udgivelsesaar : ";
    cin>>udgar;
    cout<<endl;
   
    cout<<"ISBN nummer (8 tal) : ";
    cin>>isbn;
    cout<<endl;
    if((isbnnummer[1]+isbnnummer[2]+isbnnummer[3]+isbnnummer[4]+isbnnummer[5]+isbnnummer[6]+isbnnummer[7]+isbnnummer[8]) == 44){
        cout<<"Data skrevet i fil"<<endl;
       
    void bog::bog(string vtittel, string vforfat, string vforl, string vudgaar, int visbn){
        tittle = vtittel;
        forfat = vforfat;
        Forlag = vforl;
        udgar = vudgar;
        isbn = visbn;
    };

   
        }else{
        cout<<"ISBN nummer er ikke sandt"<<endl;
   
    }

   
    break;
    case 't':
       
    void bog.getBog(){
        cout<<"titel        : "<<title<<endl;
        cout<<"Forfatter    : "<<Forfatter<<endl;
        cout<<"Forlag        : "<<Forlag<<endl;
        cout<<"Udgivelsesaar : "<<udgaar<<endl;
        cout<<"ISBN nummer  : "<<isbnnummer<<endl;
};
       
default:
    cout<<"Du har ikke truffet noget valg!!!"<<endl;

}
return 0;
}

bog.h (altså min classe fil)
#ifndef BOG_H
#define BOG_H
#include <string.h>

class bog
{
    private:
        string tittel;
    string forfatter;
    string forlag;
    int udgivelsesaar;
    string isbn;
    public:
        string getTitel();
    void setTitel(string titel);
    bog();
    bog(string titel, string forfatter, string forlag, string udgivelseaar, string isbn);

    bool isbnkonrol(string isbnnr);
};

#endif

I bliver nød til at skære det ud i pap for mig, da jeg er ny i C++

Der ryger flere point af tli jer når vi får det til at virke og jeg har forstået noget.
Avatar billede soepro Nybegynder
12. november 2002 - 12:16 #16
Du laver mange grundlæggende fejl gnyff, f.eks.:

* Navnene på dine variable er ikke stavet ens hele vejen igennem programmet
* Du mikser lokale, globale og overførte parametre - disse skal have forskellige navne, hvis du vil bruge dem samtidigt.
* Member funktioner må ikke defineres inde i andre funktioner
* Variabler (herunder dine egne klasser) skal instatieres, før du kan bruge dem

Jeg poster en rettet udgave om lidt !
Avatar billede soepro Nybegynder
12. november 2002 - 12:21 #17
BOG.CPP
#include <iostream.h>
#include <string>
#include "bog.h"
using namespace std;

// IMPLEMENTERING AF BOG'S MEMBER FUNKTIONER
bog::bog(string nTitel, string nForfatter, string nForlag, int nUdgivelsesaar, string nIsbn)
{
  setData(nTitel, nForfatter, nForlag, nUdgivelsesaar, nIsbn);
}
bog::bog(void)
{
  bog("", "", "", 0, "");
}
string bog::getTitel(void)
{
  return tittel;
}
void bog::setTitel(string ntitel)
{
  tittel = ntitel;
}
string bog::getForfatter(void)
{
  return forfatter;
}
string bog::getForlag(void)
{
  return forlag;
}
int bog::getUdgivelsesaar(void)
{
  return udgivelsesaar;
}
string bog::getIsbn(void)
{
  return isbn;
}
void bog::setData(string nTitel, string nForfatter, string nForlag, int nUdgivelsesaar, string nIsbn)
{
  tittel = nTitel;
  forfatter = nForfatter;
  forlag = nForlag;
  udgivelsesaar = nUdgivelsesaar;
  if (isbnkontrol(nIsbn))
    isbn = nIsbn;
}
bool bog::isbnkontrol(string isbnnr)
{
if (isbnnr == "")
  return true;
return (isbnnr[1]+isbnnr[2]+isbnnr[3]+isbnnr[4]
        +isbnnr[5]+isbnnr[6]+isbnnr[7]+isbnnr[8] == 44);
}

// ----------------------------- HOVEDPROGRAM -----------------------------

int main(void)
{
  bog  *minBog = NULL; // HER ER DER ÆNDRET
  string tittle; // HER ER DER ÆNDRET
  string forfat; // HER ER DER ÆNDRET
  string forl;  // HER ER DER ÆNDRET
  string udgar; // HER ER DER ÆNDRET
  int    nudgar; // HER ER DER ÆNDRET
  string isbn; // HER ER DER ÆNDRET
  char  valg; // HER ER DER ÆNDRET

  do // LØKKE SÅ DU KAN INDTASTE OG DEREFTER VISE DIN INDTASTNING
  {
    cout << "\033[2J";

    cout<<"Traef et valg: \n o = Opret \n t = Tjek\n a = Afslut\n"<<endl;
    cin>>valg;

    switch (valg){
    case 'o':
      cout<<"Bogens title : ";
      cin>>tittle;
      cout<<endl;

      cout<<"Bogens forfatter : ";
      cin>>forfat;
      cout<<endl;

      cout<<"Bogens forlag : ";
      cin>>forl;
      cout<<endl;

      cout<<"Bogens udgivelsesaar : ";
      cin>>udgar;
      cout<<endl;

      cout<<"ISBN nummer (8 tal) : ";
      cin>>isbn;
      cout<<endl;

      // HER ER DER ÆNDRET
      if(bog::isbnkontrol(isbn)){
        cout<<"Data skrevet i fil"<<endl;

        nudgar = atoi(udgar.c_str());
        // HER ER DER ÆNDRET
        if (minBog == NULL)
          // OPRETTES FØRSTE GANG
          minBog = new bog(tittle, forfat, forl, nudgar, isbn);
        else
          // INDHOLD ÆNDRES
          minBog->setData(tittle, forfat, forl, nudgar, isbn);
      }else{
        cout<<"ISBN nummer er ikke sandt"<<endl;
      }
      break;
    case 't':
      if (minBog != NULL) {
        cout<<"titel        : "<<minBog->getTitel()<<endl;
        cout<<"Forfatter    : "<<minBog->getForfatter()<<endl;
        cout<<"Forlag        : "<<minBog->getForlag()<<endl;
        cout<<"Udgivelsesaar : "<<minBog->getUdgivelsesaar()<<endl;
        cout<<"ISBN nummer  : "<<minBog->getIsbn()<<endl;
      }
      else
        cout << "Bog ikke indtastet endnu." << endl;
    case 'a':
        break;
    default:
        cout<<"Du har ikke truffet noget valg!!!"<<endl;
    };
  } while (valg != 'a');

  // OPRYDNING
  if (minBog != NULL)
    delete minBog;
  return 0;
} // Main

BOG.H
#ifndef BOG_H
#define BOG_H
#include <string.h>

class bog
{
    private:
        string tittel;
        string forfatter;
        string forlag;
        int udgivelsesaar;
        string isbn;
    public:
        string getTitel(void);
        string getForfatter(void);
        string getForlag(void);
        int    getUdgivelsesaar(void);
        string getIsbn(void);

        void setTitel(string titel);
        bog();
        bog(string titel, string forfatter, string forlag, int udgivelseaar, string isbn);

        void setData(string titel, string forfatter, string forlag, int udgivelseaar, string isbn);
        static bool isbnkontrol(string isbnnr); // HER ER DER ÆNDRET
};

#endif
Avatar billede gnyff Nybegynder
26. november 2002 - 10:55 #18
OK, jeg bliver ved med at få fejl også selv om jeg copiere jeres kode og sætter den ind.

100 point til den der kan lære mig at bruge class, helst en hulens masse forklaring så jeg selv kan kode den.
Avatar billede soepro Nybegynder
26. november 2002 - 11:38 #19
gnyff >> Forstår jeg ikke - mit eksempel ovenfor compilerer uden problemer i BCB, og fungerer. (For så vidt angår den relativ begrænsede funktionalitet.)
Avatar billede gnyff Nybegynder
26. november 2002 - 12:42 #20
Hmmm, undeligt for jeg får hele tiden fejlmeldinger, og jeg vil gerne lære at bruge class.

Kan du ikke fortælle mig punkt for punkt hvordan man bruger class??? Hvornår skal man bruge :: hvornår skal man bruge -> og hvornår skal man bruge . (punktum)????
Avatar billede soepro Nybegynder
26. november 2002 - 14:00 #21
Hvilke "fejl" meldinger får du ?

1) ::
Skal du bruge når du definerer member-funktioner uden for selve klassedefinitionen. <et eller andet>:: angiver at der der står efter :: skal findes i/hører til klassen <et eller andet>

Man ser det sommetider (tit her på eksperten) brugt sammen med "flag" fra system-klasserne, f.eks.;

Std::endl i fbm. f.eks. cout << "Hello World" << Std::endl;

2) ->
Dette skal du bruge hvis din variabel er en pointer, dvs. defineret <et eller andet> *Variabel, og "får" sin værdi vha. Variabel = &<Noget andet>, eller Variabel = new <Et eller andet>();

3) .
Dette skal du bruge hvis din variabel er direkte instatieret, dvs. IKKE en pointer <Et eller andet> Variabel og "får" sin værdi med alm. assignment Variabel = 12; eller Variabel = <En anden variabel af samme type>

At forklare brugen af klasser, er udenfor hvad eksperten skal bruges til - så skal du søge en relevant bog i stedet. (Mange har stillet ? og hvor man kan finde sådanne bøger - prøv at søge på ordene 'bøger lærebog klasser classes' og se hvad der bliver fundet.)
Avatar billede gnyff Nybegynder
27. november 2002 - 19:01 #22
Jeg får "improper use of typedef 'string'" og nogen andre.

Det jeg er intresseret i at vide er hvordan jeg opbygger min klasse.

jeg har fundet ud af at en class skal se sådan ud:
#include <iostream.h>

class test()
{
private:
char variable;
public:
variable = a+b;
return variable;
}

men hvordan overfører jeg variablerne og hvordan laver jeg funktioner med class???

af hvad jeg har lært skulle jeg kunne overfører variablen sådan:

test.variable;

og det er det jeg er intresseret i at lære.
Avatar billede soepro Nybegynder
28. november 2002 - 08:56 #23
gnyff >> Kig på mit eksempel lige ovenfor een gang til - alle de svar du søger, står der ! Klassen defineres i bog.h - de enkelte member funktioner i bog.cpp. Klassen variabler defineres (god latin/skik og brug) i enten private: eller protected: delen af din klasse, men public: delen indeholder både den egentlige funktioner på klassen, samt de såkaldte "getters" og "setters" der gør det muligt at få fast i eller ændre værdierne.

Det er IKKE god skik og brug, at man kan tilgå klassen interne variabler direkte som test.variabel, der skal man bruge "getters" og "setters" - bl.a. fordi du så kan ændre på måde de interne data gemmes, uden at du behøver at ændre resten af dit program. (Det kaldes indkapsling.)

Hvis du ikke kan finde svaret på dine spørgsmål ud fra ovenstående eksempel - SOM INGEN KOMPILERINGS FEJL GIVER !!! - så mener jeg stadig at du skal finde dig en brug om grundlæggende C++ og begrebet klasser, for at forklare det her på eksperten fører alt, alt for vidt.
Avatar billede gnyff Nybegynder
28. november 2002 - 11:57 #24
OK, hvad for en compiler bruger du siden at jeg bliver ved med at få fejl???

Se jeg er begynder i c++, og jeg tager et kursus, som jeg ikke syntes er særligt godt. Til dettet kursus har jeg købt en bog ("Computing using c++ and object technoligy" med ford og topp) jeg har læst kapitel 4 igennem 7 gange og har stadig ikke forstået hvordan man laver en class. Derfor håbede jeg på at jeg kunne gå på eksperten, og få hjælp, og ikke en hulsens masse kompiseret kode og en hel masse henvisninger til den.

Hvis jeg laver en class som hedder test så skriver jeg

#ifndef "test.h"
#define "test.h"
#include <iostream.h>

class test
{
public:
string getTest = a+b;
}
#endif

Og så skulle jeg kunne kalde den med

string test::test(void){
return test;
}
Avatar billede soepro Nybegynder
28. november 2002 - 12:07 #25
1) Jeg bruger Borland C++ Builder - du skal have en C++ compiler, for at kunne anvende klasser. (gcc f.eks. duer ikke - du skal bruge g++)

2) Det eksempel er helt galt. Du skal huske at klasse-defintioner og implementeringer af metoder INTET har at gøre med dit egentlige program. Dit eksempel skulle se sådan her ud (bemærk at det skal blive til TRE (3!) filer i dit bibl.):

// TEST.H
#ifndef __TEST_H__
#define __TEST_H__
#include <iostream.h>

class test
{
  private:
  string a;
  string b;
  public:
  test(string va, string vb);
  string getTest(void);
}
#endif // TEST.H ikke allerede inkluderet een gang

// TEST.CPP
#include "test.h"
test::test(string va, string vb)
{
  a = va;
  b = vb;
} // constructor
string test::getTest(void)
{
  return a+" "+b;
} // "Getter"

og så ser dit alm. hovedprogram sådan her ud

// MAIN.CPP
#include <stdio.h>
#include <conio.h>

#include "test.h"
int main(void)
{
  test minTest("Hej", "Gnyff");

  cout << minTest.getTest() << endl;
  getch();
  return 0;
} // main
Avatar billede cynosure Nybegynder
28. november 2002 - 14:57 #26
C++ Grundbog
Jesse Liberty
ISBN: 87-7843-561-7
IDG Forlag
Kr. 349,00
383 sider
Avatar billede gnyff Nybegynder
29. november 2002 - 08:21 #27
soepro>> Uhh, det forstår jeg noget af :) Men hvorfor skal man bruge 3 filer? Kan man ikke bruge 2?
Avatar billede soepro Nybegynder
29. november 2002 - 09:28 #28
Man *KAN* nøjes med een - med det er god skik og brug at lave 2 pr. klasse - en .h og en .cpp fil. Så kan du jo også bruge klassen i andre sammenhænge.
Avatar billede gnyff Nybegynder
02. december 2002 - 11:46 #29
Ok, men hvis jeg skal includere en classe i 2 filer skal det så se sådan ud:???

main.cpp:
#include <iostream.h>

#include "test.h"

int main()
{
char a;
char b;
test::test(char va){
a =va;
}
cout<<test::getTest()<<endl;
return 0;
}

og i test.h:

#ifndef __TEST_H__
#define __TEST_H__
#include <iostream.h>

class test
{
  private:
  char a;
  public:
  test(char va);
  char getTest(void);
}
#endif
Avatar billede soepro Nybegynder
02. december 2002 - 11:47 #30
Jah - men du skal jo så også definere "body" til char getTest(void) i din .CPP fil.
Avatar billede gnyff Nybegynder
02. december 2002 - 13:45 #31
Den forstod jeg ikke helt, jeg prøvede at ændre min int main(){... til char main(){... men jeg får stadig fejl.
Too many types in declaration
Type 'test' may not be defined here
Expression syntax in function main
) expected in function main

Hvor mener du jeg skal ændre den???
Avatar billede soepro Nybegynder
02. december 2002 - 14:10 #32
Gnyff >> Vær sød at kigge på den kode som er postet indtil flere gange ! Det er altså et fuldt ud fungerende eksempel ! Din main() har intet med "body" til member-funktionerne at gøre. Måske skulle du sænke dit ambitionsniveau lidt, og lære grundlæggende C først ?!? Hvis ovenstående bog ikke kan forklare brugen af klassen ordentligt, så smid den ud ! - Så svært er klasser altså heller ikke - grundlæggende er en klasse det samme som en struct !

Hvis ikke ovenstående kan hjælpe dig videre, er jeg bange for at jeg heller ikke rigtigt kan hjælpe dig.
Avatar billede gnyff Nybegynder
19. december 2002 - 18:41 #33
OK, i får noget for hjælpen... selv om det ikke var til meget hjælp.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester