Avatar billede exp-ralle Nybegynder
09. november 2002 - 13:51 Der er 7 kommentarer og
1 løsning

Fejl, hvorfor?

Hejsa...

Når jeg kører en exe fil med flg. indhold får jeg en "Klasser.exe har fundet en fejl og afsluttes. Vi beklager udlejligheden." fejl.
Det mærkelige er at jeg ikke får hverken compiler fejl eller linking fejl (det er i VC++), men det virker fint i Dev-C++ med samme kode:

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

class Hund
{
public:

int SaetAlder(int alder);
int HentAlder();
string SaetFarve(string farve);
string HentFarve();

private:

unsigned int densAlder;
string densFarve;
};

int Hund::SaetAlder(int alder)
{
densAlder = alder;
return 0;
}

string Hund::SaetFarve(string farve)
{
densFarve = farve;
return 0;
}

int Hund::HentAlder()
{
return densAlder;
}

string Hund::HentFarve()
{
return densFarve;
}


int main()
{
Hund Fido;
Fido.SaetAlder(5);
Fido.SaetFarve("Brun");

cout << "Fido's farve er: " << Fido.HentFarve() << endl;
cout << "Fido's alder er: " << Fido.HentAlder() << endl;
return 0;
}
Avatar billede exp-ralle Nybegynder
09. november 2002 - 13:54 #1
Hmm... har lige fundet ud af at fejlen er at der står return 0; under Hund::SaetFarve og Hund::SaetAlder...

Når jeg gør det i Dev-C++ får jeg nemlig en "Klasser.exe har fundet en fejl og afsluttes. Vi beklager udlejligheden." fejl også.

Men VC++ kræver at de 2 funktioner retunerer, hvad skal jeg gøre?
Avatar billede soreno Praktikant
09. november 2002 - 13:55 #2
dine set metoder bør ikke returnere noget, altså:
int Hund::SaetAlder(int alder)
{
densAlder = alder;
return 0;
}

skal være:

void Hund::SaetAlder(int alder)
{
  densAlder = alder;
}
Avatar billede exp-ralle Nybegynder
09. november 2002 - 13:55 #3
Det er dette den siger når jeg fjerner de 2 dumme return linier:

C:\Documents and Settings\Larsen\Skrivebord\StuFF\C++\Ny\Klasser\Klasser.cpp(23) : error C4716: 'Hund::SaetAlder' : must return a value
C:\Documents and Settings\Larsen\Skrivebord\StuFF\C++\Ny\Klasser\Klasser.cpp(28) : error C4716: 'Hund::SaetFarve' : must return a value
Avatar billede soreno Praktikant
09. november 2002 - 13:56 #4
du skal også huske at ændre definitionen af funktionen:
int SaetAlder(int alder);

til
void SaetAlder(int alder);
Avatar billede exp-ralle Nybegynder
09. november 2002 - 14:01 #5
Kanont...
Men hvorfor giver det sådan en fejl og ikke en compiler fejl?
Avatar billede soreno Praktikant
09. november 2002 - 14:04 #6
det er nok fordi de ikke har implementeret compileren på samme måde.
jeg er egentlig ikke klar over hvad standarden siger på det område. men umiddelbart plejer det at være gcc (altså den der følger med dev-cpp) der følger standarden mest.
Avatar billede exp-ralle Nybegynder
09. november 2002 - 14:06 #7
Okay...

Mange tak
Avatar billede soepro Nybegynder
11. november 2002 - 10:58 #8
I de fleste compilerer er 0 synonymt med NULL (en int = 0) - og det er i disse compilere OK at returnere en NULL pointer i stf. en string.

Som ovenfor skrevet, bør dine setters ikke returnere noget - andet end f.eks. en bool, som så angiver om dit set er gennemført eller ej. (F.eks. hvis setteren indeholder noget valideringslogik, der sikrer en gyldig værdi - så nagiver returneret true at værdien var OK og er ændret - false at værdien ikke var ok.
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