Kezdőoldal » Számítástechnika » Programozás » Mi a hiba a forráskódban?...

Mi a hiba a forráskódban? Segítség nagyon sürgős.

Figyelt kérdés

Lefordul nincs warning se de amikor elindítom hiba miatt leáll a progi.

........

//main.cpp

# include <iostream> //cout,cin,endl

# include <stdlib.h> //EXIT_SUCCESS

# include <string> //string

# include <windows.h> //Sleep(99),exit(0)


typedef unsigned short ushort;

typedef unsigned short uint;


using std::cout;

using std::cin;

using std::endl;

using std::string;



//CAT deklaration

class CAT

{

public:

CAT(); //konstruktor1

CAT(ushort age,ushort weight); //konstruktor2

CAT(ushort age); //konstruktor3

CAT(const CAT &rhs); //copy konstruktor

~CAT(); //destruktor

const CAT operator=(const CAT &rhs); //operator=


const CAT operator++(); //operator++ prefix

const CAT operator++(int); //operator++ postfix

const CAT operator+(const CAT &rhs); //operator+


ushort GetAge()const;

void SetAge(ushort age);

ushort GetWeight()const;

void SetWeight(ushort weight);

private:

ushort *itsAge;

ushort *itsWeight;

};


//CAT definition

//konstruktor1,konstrktor2,konstruktor3,copy konstruktor,destruktor,operator=

CAT::CAT():

itsAge(new ushort(1)),

itsWeight(new ushort(2))

{cout <<"Konstruktor1 \n";}


CAT::CAT(ushort age,ushort weight):

itsAge(new ushort(age)),

itsWeight(new ushort(weight))

{cout <<"Konstruktor2 \n";}


CAT::CAT(ushort age):

itsAge(new ushort(age))

{cout <<"Konstruktor3 \n";}


CAT::CAT(const CAT &rhs)

{

cout <<"Copy konstruktor \n";

itsAge = new ushort;

itsWeight = new ushort;

*itsAge = rhs.GetAge();

*itsWeight = rhs.GetWeight();

}


CAT::~CAT()

{

cout <<"Destruktor \n";

delete itsAge;

delete itsWeight;

itsAge = NULL;

itsWeight = NULL;

}


const CAT CAT::operator=(const CAT &rhs)

{

cout <<"operator= \n";

if(this == &rhs)

return *this;

delete itsAge;

delete itsWeight;

itsAge = new ushort;

itsWeight = new ushort;

*itsAge = rhs.GetAge();

*itsWeight = rhs.GetWeight();

return *this;

}


//operator++ pre,operator++ post,operator+

const CAT CAT::operator++()

{

cout <<"operator++ prefix \n";

++*itsAge;

++*itsWeight;

return *this;

}


const CAT CAT::operator++(int)

{

cout <<"operator++ postfix \n";

++*itsAge;

++*itsAge;

return *this;

}


const CAT CAT::operator+(const CAT &rhs)

{

cout <<"operator+ \n";

return CAT(*itsAge+rhs.GetAge(),*itsWeight+rhs.GetWeight());

}


//metódus:GetAge,SetAge,GetWeight,SetWeight

ushort CAT::GetAge()const

{return *itsAge;}


void CAT::SetAge(ushort age)

{*itsAge = age;}


ushort CAT::GetWeight()const

{return *itsWeight;}


void CAT::SetWeight(ushort weight)

{*itsWeight = weight;}



//main start

int main()

{

ushort TheUshort = 100;

CAT Bolyhos(3,6),Cirmi(4,8),Morcos;

cout <<"\nBolyhos most "<< Bolyhos.GetAge() <<" eves \n"

<<"Cirmi most "<< Cirmi.GetAge() <<" eves \n"

<<"Morcos most "<< Morcos.GetAge() <<" eves \n\n"


<<"Bolyhos most "<< Bolyhos.GetWeight() <<" kg \n"

<<"Cirmi most "<< Cirmi.GetWeight() <<" kg \n"

<<"Morcos most "<< Morcos.GetWeight() <<" kg \n\n";

Morcos = Cirmi + Bolyhos;

cout <<"\nBolyhos most "<< Bolyhos.GetAge() <<" eves \n"

<<"Cirmi most "<< Cirmi.GetAge() <<" eves \n"

<<"Morcos most "<< Morcos.GetAge() <<" eves \n\n"


<<"Bolyhos most "<< Bolyhos.GetWeight() <<" kg \n"

<<"Cirmi most "<< Cirmi.GetWeight() <<" kg \n"

<<"Morcos most "<< Morcos.GetWeight() <<" kg \n\n";

Morcos = TheUshort;

cout<<"Morcos most "<< Morcos.GetWeight() <<" kg \n\n";



return EXIT_SUCCESS;

}


2012. ápr. 6. 22:40
 1/10 A kérdező kommentje:

De nem értem mit kell problémáznia lefordul és nincs warning itt a forráskód:

[link]

2012. ápr. 6. 23:07
 2/10 anonim ***** válasza:

Szeretlek C++ :D. Igazán leírhattad volna hogy milyen nyelv...


Milyen hibát dob vissza? Betehetted volna azt is...

2012. ápr. 6. 23:48
Hasznos számodra ez a válasz?
 3/10 A kérdező kommentje:

Le írtam,hogy nincs hiba.

No errors no warning.

Szépen lefordul csak amikor futtatom a progit akkor ki írja,hogy a windows hibát észlelt ezért a program leáll.

2012. ápr. 7. 00:02
 4/10 iostream ***** válasza:
Az a hiba, hogy az egyparaméteres konstruktor (CAT::CAT(ushort age):) nem foglal le helyet a súlyának, és mikor ez hajtódik végre: Morcos = TheUshort;, ő használná a súly által mutatott értéket is. Az meg isten tudja, hova mutat.
2012. ápr. 7. 00:07
Hasznos számodra ez a válasz?
 5/10 A kérdező kommentje:
És ezt,hogyan tudnám megoldani?
2012. ápr. 7. 00:21
 6/10 A kérdező kommentje:

Most lefoglaltam a súlynak is de így sem jó.

CAT::CAT(ushort age):

itsAge(new ushort(age)),

itsWeight(new ushort(*itsWeight))

{cout <<"Konstruktor3 \n";}

2012. ápr. 7. 00:27
 7/10 A kérdező kommentje:
Nem tudod érthetőbben elmagyarázni,hogy miért nem jó mert nem értem.
2012. ápr. 7. 00:28
 8/10 A kérdező kommentje:

Sikerült megfejtenem a magyarázatodat és már tudom mi a baj.

Lefoglaltam memóriaterületet az itsWeight számára is de úgy sem jó.

2012. ápr. 7. 00:32
 9/10 A kérdező kommentje:

Nem tudom megoldani sajnos :(

CAT::CAT(ushort age):

itsAge(new ushort(age)),

itsWeight(new ushort()) //hogyan oldjam meg,hogy az itsWeight-ben mindig ugyanaz a érték maradjon mint az előző objektumban?

{cout <<"Konstruktor3 \n";}


Például:

CAT Morcos;

unsigned short TheUshort = 100;

Morcos = TheUshort;


Ugye ilyenkor meghívódik a konstruktor3 ami egy új objektumot csinál a Morcosból.

De én azt szeretném,hogy a Morcos itsWeight értéke ne vesszen el.

Ezt megtehetném úgy,hogy a konstruktor3 ban bele írom a súlyát is.

Így:

CAT::CAT(ushort age):

itsAge(new ushort(age)),

itsWeight(new ushort(8)) //Ide írtam a súlyát is.

{cout <<"Konstruktor3 \n";}


De ha növelem az itsWeight értékét egyel tehát kilenc lesz és ezután lefuttatom megint ezt a kódsort Morcos = TheUshort akkor itsWeight értéke vissza áll 8 ra.

Ezt nem akarom.

Mi a megoldás?

2012. ápr. 7. 00:51
 10/10 iostream ***** válasza:

Ehhez valahogy meg kéne tudnod különböztetni az operator=-ben (merthogy ott íródik felül), hogy milyen objektumot is akarsz értékül adni Morcosnak.


Morcos = TheUshort;


Ez a sor azt fogja csinálni, hogy meghívja a hármas konstruktort TheUshort paraméterrel, csinál egy névtelen CAT objektumot, aminek 8 a súlya.

Aztán meghívja az operator=-t, ahol felülírja Morcos súlyát (és évét, de az neked jó) a saját 8 súlyával.


Javaslom, hogy ha ilyet akarsz, akkor inkább hívj egy setAge függvényt, vagy ilyesmi.

2012. ápr. 7. 07:55
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!