Mi lehet a hiba? Nem bírok rájönni. //C++
//main.cpp
# include <iostream> //std::cin;std::cout;std::endl;std::string;
# include <string> //std::string;
# include <windows.h> //Sleep(500);exit(0);
# include <stdlib.h> //EXIT_SUCCESS;
typedef unsigned short ushort;
typedef unsigned int uint;
using std::cout;
using std::cin;
using std::endl;
using std::string;
//create CAT
class CAT
{
public:
CAT(); //konstruktor
CAT(ushort age,ushort weight); //konstruktor2
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+
int GetAge()const;
void SetAge(int age);
int GetWeight()const;
void SetWeight(int weight);
private:
ushort *itsAge;
ushort *itsWeight;
};
//konst,konst2,copy konst,dest,operator=
CAT::CAT():
itsAge(new ushort(1)),
itsWeight(new ushort(1))
{cout <<"Konstruktor \n";}
CAT::CAT(ushort age,ushort weight):
itsAge(new ushort(age)),
itsWeight(new ushort(weight))
{cout <<"Konstruktor2 \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 <<"opeator++ prefix \n";
++*itsAge;
++*itsWeight;
return *this;
}
const CAT CAT::operator++ (int)
{
cout <<"operator++ postfix \n";
++*itsAge;
++*itsWeight;
return *this;
}
const CAT CAT::operator+ (const CAT &rhs)
{
cout <<"operator+ \n";
return CAT(*itsAge+rhs.GetAge());
}
//metódus
int CAT::GetAge()const
{return *itsAge;}
void CAT::SetAge(ushort age)
{*itsAge = age;}
int CAT::GetWeight()const
{return *itsWeight;}
void CAT::SetWeight(ushort weight)
{*itsWeight = weight;}
//main start.
int main()
{
CAT CatOne(2,8),CatTwo(6,12),CatThree;
return EXIT_SUCCESS;
}
hibaüzi:
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp||In member function 'const CAT CAT::operator+(const CAT&)':|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|102|error: no matching function for call to 'CAT::CAT(int)'|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|102|note: candidates are:|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|50|note: CAT::CAT(const CAT&)|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|50|note: no known conversion for argument 1 from 'int' to 'const CAT& {aka const CAT&}'|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|45|note: CAT::CAT(ushort, ushort)|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|45|note: candidate expects 2 arguments, 1 provided|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|40|note: CAT::CAT()|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|40|note: candidate expects 0 arguments, 1 provided|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|109|error: prototype for 'void CAT::SetAge(ushort)' does not match any in class 'CAT'|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|31|error: candidate is: void CAT::SetAge(int)|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|115|error: prototype for 'void CAT::SetWeight(ushort)' does not match any in class 'CAT'|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|33|error: candidate is: void CAT::SetWeight(int)|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp||In member function 'const CAT CAT::operator+(const CAT&)':|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|103|warning: control reaches end of non-void function [-Wreturn-type]|
||=== Build finished: 12 errors, 1 warnings ===|
Miért nem jó?
return CAT(*itsAge+rhs.GetAge());
itt jelzi,hogy gond van.
Második hibaüzenet:
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|102|error: no matching function for call to 'CAT::CAT(int)'|
Melyik része nem megy? Lefordítom magyarra: nincs illeszkedő függvény az alábbi szignatúrára: CAT::CAT(int)
Nem értem még mindig,hogy miért kell problémáznia a fordítónak hisz ez a függvény deklarációja és definíciója is teljesen jól van.
........................
const CAT CAT::operator+ (const CAT &rhs)
{
cout <<"operator+ \n";
return CAT(*itsAge+rhs.GetAge());
}
Én már tegnapelőttől keresem a választ erre,hogy mit kéne máshogy csinálnom és,hogy miért.
Segítsetek léci most nagy szükségem van rá.
"Lefordítom magyarra: nincs illeszkedő függvény az alábbi szignatúrára: CAT::CAT(int)"
Ezt miért nem érted? Az a problémája, hogy te a CAT(int) szignatúrájú függvényt akarod meghívni a kérdéses sorban, ami nem létezik. Nem. Létezik. Mi a megoldás erre a problémára? Egyáltalán tudod mi lenne a CAT(int) szingatúrájú függvény? Segítek: konstruktor. Te ott konstruálni akarsz egy CAT objektumot. Nincs olyan konstruktor. Ezt írja a hibaüzenet is.
Így már jó:
return CAT(*itsAge+rhs.GetAge(),*itsWeight+rhs.GetWeight());
De az nem értem iostream,hogy amikor elmagyarázol valamit akkor miért nem értem.
Így is le írhattad volna és egyből sikerült volna megértenem.
ezzel return CAT(*itsAge+rhs.GetAge()) a kóddal te meghívod a konstruktort ami egy paramétert ad át neki.De mivel nincs olyan konstruktor mai egy paramétert várna ezért van a hiba.
na és ha csak az itsAget akarom összeadni return CAT(*itsAge+rhs.GetAge());
Ebben az esetben mindenképp kellene írnom egy konstruktort ami egy bemenő paramétert vár ugye?
Vagy deklarálhatod így a másikat:
CAT(ushort age, ushort weight = 0);
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!