Miért nem fordul le? Sürgős.
//main.cpp
# include <iostream>
# include <cstring>
typedef unsigned short ushort;
typedef unsigned int uint;
using namespace std;
class Ember {
public:
Ember(ushort,string = '\0');
Ember(const Ember &);
~Ember();
void SetName(string name) { *itsName = name; }
void SetMagassag(ushort age) { *itsMagassag = age; }
string GetName()const { return *itsName; }
ushort GetMagassag()const { return *itsMagassag; }
static ushort GetSzamlalo() { return 0; }
Ember & operator=(const Ember &);
bool operator <(const Ember&);
bool operator >(const Ember&);
bool operator <=(const Ember&);
bool operator >=(const Ember&);
Ember & operator++();
Ember operator++(int);
Ember operator-(const Ember&);
protected:
private:
string *itsName;
ushort *itsMagassag;
static ushort itsSzamlalo;
};
ushort Ember::itsSzamlalo = GetSzamlalo();
Ember::Ember(ushort magassag,string name):
itsName(new string(name)),
itsMagassag(new ushort(magassag))
{ ++itsSzamlalo; }
Ember::Ember(const Ember &e):
itsName(new string(e.GetName())),
itsMagassag(new ushort(e.GetMagassag()))
{}
Ember::~Ember() {
delete itsName;
delete itsMagassag;
--itsSzamlalo;
}
Ember & Ember::operator=(const Ember &e) {
if(this==&e)
return *this;
delete itsName;
delete itsMagassag;
itsName = new string(e.GetName());
itsMagassag = new ushort(e.GetMagassag());
return *this;
}
bool Ember::operator<(const Ember &e) {
return this->GetMagassag() < e.GetMagassag();
}
bool Ember::operator>(const Ember &e) {
return this->GetMagassag() > e.GetMagassag();
}
bool Ember::operator<=(const Ember &e) {
return this->GetMagassag() <= e.GetMagassag();
}
bool Ember::operator>=(const Ember &e) {
return this->GetMagassag() >= e.GetMagassag();
}
Ember & Ember::operator++() {
++(*itsMagassag);
return *this;
}
Ember Ember::operator++(int) {
const Ember temp(*this);
++(*itsMagassag);
return temp;
}
Ember Ember::operator-(const Ember &e) {
return new Ember(*itsMagassag - e.GetMagassag());
}
int main() {
return 0;
}
error: invalid conversion from 'Ember*' to 'ushort {aka short unsigned int}' [-fpermissive]
Nem bírok rájönni segítsetek már.
Így nem jó:
return new Ember(*itsMagassag - e.GetMagassag());
Így meg jó:
return Ember(*itsMagassag - e.Getmagassag());
error: invalid conversion from 'Ember*' to 'ushort {aka short unsigned int}' [-fpermissive]
Ez a hibaüzenet azt jelenti, hogy nem tud Ember mutatóból unsigned short-ot konvertálni.
Ez a függvény prototípusa:
Ember Ember::operator-(const Ember &e)
Tedd össze: milyen visszatérési értéket adtál meg a prototípusban, és mivel próbálsz visszatérni?
Összetettem és jól van.
Nem értem mi a baj.
Segíthetnétek többet is.Én itt egy új objektumot hozok létre dinamikusan.
Ha elhagyom a new kulcsszót akkor jó.
De new kulcsszóval is jónak kellene lennie a new al csak azt mondom meg,hogy a dinamikus memóriába kívánom létrehozni.
Mi az istenér nem tudja létrehozni.
A prototípusban is ezt adtam meg:
Ember Ember::operator-(const Ember &e) ; deklaráció.
definíció:
Ember Ember::operator-(const Ember &e) {
return new Ember(*itsMagassag - e.GetMagassag());
}
Miért rossz így?
Egyszer ugyanilyen formában adtam vissza az értéket és jó volt most meg nem.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!