- Ízléses lett a Drop kompakt, vezeték nélküli klaviatúrja
- Jól felszerelt, csúcskategóriás külső videokártya jött a Gigabyte zászlaja alatt
- Gamescom 2025: Limitált szériás Godlike X lap és más finomságok az MSI-nél
- Leégett az első Radeon a hírhedt 12V-2x6 tápkonnektorral
- India betiltja a pénzalapú online játékokat
- Külső 3,5'' mobil rack-ek topikja
- Sony MILC fényképezőgépcsalád
- AMD Navi Radeon™ RX 9xxx sorozat
- 5.1, 7.1 és gamer fejhallgatók
- Apple asztali gépek
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen TV-t vegyek?
- Ízléses lett a Drop kompakt, vezeték nélküli klaviatúrja
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- TCL LCD és LED TV-k
Új hozzászólás Aktív témák
-
sghc_toma
senior tag
hm.. fura, nalam fordul.. itt vannak a diff-ek a pastebin-es kodhoz kepest:
diff Termekek.h Termekek_mine.h
158c158
< Product& operator<(Product& j1,Product& j2);
---
> bool compare(Product * j1, Product * j2);diff Termekek.cpp Termekek_mine.cpp
482c482
< sort(store.begin(),store.end());
---
> sort(store.begin(),store.end(), compare);
485c485
< bool operator<(Product& j1,Product& j2)
---
> bool QuickFrozen::compare(Product * j1, Product * j2)
487c487
< return strcmp(j1.get_name(),j2.get_name());
---
> return strcmp(j1->get_name(), j2->get_name()) < 0;ja, es a main fuggvenyed void visszateresi erteku.. ez nem okes, int-nek kene lennie.. nem is ertem, a cl miert nem szol erte (W4-gyel sem)..
-
sghc_toma
senior tag
a Termekek.h-ban van egy ilyen:
Product& operator<(Product& j1,Product& j2);
ez ugye nem OK, bool a helyes visszateresi ertek..meg egy ilyen:
return strcmp(j1.get_name(),j2.get_name());
ez nem jo, mert akkor igaz, ha nem egyenlo a ket nev, nem akkor, amikor az elso kisebb..
Es ami a fo problema: a vektorban ugye pointereket tarolsz, az operator< meg referenciakkal dolgozik, ez igy nem okes.. tehat kell egy osszehasonlito fv., ami valahogy igy nez ki:
bool compare(Product * p1, Product * p2)
{
return strcmp(p1->get_name(), p2->get_name()) < 0;
}ezt megadhatod harmadik parameternek a sort-nak..
remelem nem neztem el semmit (kicsit sietve futottam at a kodot, eppen beadandot irok)
-
sghc_toma
senior tag
ha irtal kisebb operatort, akkor nem kell harmadik parameter, mivel a sort alapbol azt hasznalja.. tehat pl. ennek igy mukodnie kell:
#include <vector>
#include <algorithm>
class Product
{
//...
int value;
public:
friend bool operator<(const Product & p1, const Product & p2);
}
bool operator<(const Product & p1, const Product & p2)
{
return p1.value < p2.value;
}
int main()
{
std::vector<Product> products;
//...
std::sort(products.begin(), products.end());
return 0;
} -
Jester01
veterán
Ha tényleg nem szereti a 3 paraméteres változatot akkor ott valami gubanc van a fordítási környezettel mert az összes fellelhető dokumentáció azt állítja hogy ez szabványos. Ha a környezettel nem tudsz mit kezdeni akkor nincs más hátra mint előre, és írni egy a követelményeidnek megfelelő rendezést kézzel.
-
Sk8erPeter
nagyúr
Hali!
Az eredeti kód azért nem fordul, mert void visszatérési értékű a getParameter() függvényed a Gift osztályban, ami miatt a cout elszáll.
Ezt megoldhatod úgy, hogy inkább double visszatérési értékűvé változtatod:
double getParameter(){ return 0; }; /// void getParameter(){} helyettDe ennél a kiíratást egyszerűbben oldanám meg, mondjuk lehetne minden osztálynak egy void print() művelete, ami épp a feladat által kiírt tulajdonságokat írná ki.
Egy lehetséges példa a Te feladatodra vonatkozóan:
-a Gift osztályban deklarálj egy
virtual void print();
függvényt, az összes többi osztályban pedig egy sima (nem virtuális)
void print();
függvényt.
-maga a megvalósítás pedig a következőképpen nézhetne ki (csak egy lehetséges megoldás, lehetne rajta bőven csiszolni, de gyorsmegoldásként szerintem megfelel):using namespace std;
void Gift::print()
{
cout << "Weight: " << baseWeight << endl;
cout << "Quantity: " << db << endl;
}
void ColoredEgg::print()
{
cout << "Name: Colored Egg" << endl;
cout << "Quantity: " << getWeight() << endl;
//Paraméter:
char colours[4][7] = { "RED", "GREEN", "BLUE", "VIOLET" };
cout <<"Color: "<< colours[colour] << endl;
}
void ChocolateFigure::print()
{
cout << "Name: Chocolate Figure" << endl;
cout << "Quantity: " << getWeight() << endl;
//Paraméter:
std::cout <<"Melting Point: "<< MeltingPoint << endl;
}
void Candy::print()
{
cout << "Name: Candy" << endl;
cout << "Quantity: " << getWeight() << endl;
//Paraméter:
char quality_names[4][5] = { "HARD" , "SOFT" };
std::cout <<"Quality: "<< quality_names[quality] << endl;
}-Ezenkívül szerintem a destruktort a Gift osztályban virtuálissá kellene tenned, hogy ne legyen memóriaszivárgás:
virtual ~Gift() {}
A Testing.cpp-ben pedig a for ciklus akkor ez alapján a következőképpen nézhetne ki (a többi rendben van):
for (int i = 0; i < 3; i++) // kiíratjuk
{
cout << "************************" <<endl; //csak az elválasztás kedvéért
Present[i]->print();
} -
Sk8erPeter
nagyúr
Legközelebb azért az ilyen hosszúakat légyszi a pastebin.com-ra, vagy a pastie.org-ra copy-paste-eld, ezeken az oldalakon szépen kiemeli a szintaktikát is (ha bejelölöd, hogy pl. C++ nyelvű forráskód), és így könnyebb áttekinteni, mint itt a PH-n.
Ja, és ide csak dobd be a linket, amit kapsz a bemásolás után.
-
Jester01
veterán
Neked igen érdekes hibát dob a fordító, az enyém az "érthetően" megmondja mi a baj:
Vector.cpp:127: error: no match for 'operator<<' in 'std:
perator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char, std::char_traits<char> >&)((std:
stream*)os)), 32) << ((const Vector*)v)->Vector::at(i)'
Magyarul, a Vector-t kiíró operator<< a String-et kiíró operator<< függvényt szeretné hívni, csakhogy ilyen nincs. Van helyette viszont String::print, szóval ez jobb: os<<' '; v.at(i).print(os); Ehhez még szükséges a String::print const-tá alakítása, illetve a Vector.h-ban az operator<< prototípusát is javítani kell mert nem egyezik az implementációval. Ha ez mind megvan, akkor már fordul, csak nem működik
Felhívom a figyelmed továbbá, hogy a string konstansok azok bizony konstansok, tehát const char* típusúak.
-
mgoogyi
senior tag
#include "fifo.h"
#include<stdio.h>FiFo:
iFo()
{
elementNum=0;
pData=0;
}FiFo:
iFo(const FiFo&theOther)
{
if(theOther.elementNum==0)
{
elementNum=0;
pData=0;
}
else
{
elementNum=theOther.elementNum;
pData=new double[elementNum];
for(int i=0;i<elementNum;i++)
{
pData=theOther.pData(i);
}
}
}FiFo::~FiFo()
{
if (pData) {
delete [] pData;
pData = 0;
}
}double FiFo::get()
{
if (elementNum==0) {
return 0;
}if(elementNum==1)
{
double element=pData[0];
if (pData) {
delete [] pData;
pData = 0;
}
elementNum=0;
return element;
}
elementNum--;
double element=pData[0];
double*pTemp=new double[elementNum];
for(int i=0;i<elementNum;i++)
{
pTemp(i)=pData[i+1];
}
if (pData) {
delete [] pData;
pData = 0;
}
pData=pTemp;
return element;
}bool FiFo::put(double element)
{
double*pTemp=new double[elementNum+1];
elementNum++;
for(int i=0;i<elementNum-1;i++)
{
pTemp(i)=pData(i);
}
pTemp[elementNum-1]=element;
if (pData) {
delete [] pData;
pData = 0;
}
pData=pTemp;
return true;
}bool FiFo::empty()
{
elementNum=0;
if (pData) {
delete [] pData;
pData = 0;
}
return true;
}Alapból a destruktorban szállt el, hiszen a get()-nél mikor kivetted az utolsó elemet, már felszabadítottad a pData-t, a destruktor pedig még1x megpróbálta ezt megtenni.
-
Jester01
veterán
Nem működő programok esetén
1) használj debuggert
2) használj memória-hozzáférés ellenőrzőt (valgrind)
3) mondd meg pontosan milyen bemenetre milyen hibát ad, vagy mennyiben nem várt eredményt (a "nem fut le normálisan" nulla információ)
4) teljes, futtatható programot postolj, hogy mi is ki tudjuk próbálni (ebben ugye nem volt main) -
mgoogyi
senior tag
1, Ha csinálsz egy olyat, hogy
delete pData; akkor csináld így:
if (pData!=null) {
delete pData; pData = null;
}Ha úgy próbálsz felszabadítani, hogy a pData-t már egyszer felszabadítottad, el fog szállni futás közben, ezért a null-ra állítással jelzed magadnak, hogy felszabadítottad-e vagy sem.
Meg engem eléggé zavar, hogy pData=0; -t használsz pData=null; helyett.
2, A get()-nél nem ellenőrzöd, hogy elementNum elérte-e a nullát, mert ha igen, akkor a pData[0]-tól semmi jót ne várj.
3, az empty()-nél is ez kéne:
if (pData!=null) {
delete pData; pData = null;
}4, Nagyon nem hatékony, hogy minden egyes beszúrásnál és törlésnél újrafoglalod a tömböt meg átmásolgatod az elemeket. Célszerűbb lenne egy oda-vissza láncolt lista.
Remélem tudtam segíteni! Ha null-t Null-nak vagy NULL-nak kell itt írni, akkor sorry, mostanában inkább java-zok...
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Robotporszívók
- Formula-1
- Külső 3,5'' mobil rack-ek topikja
- Sony MILC fényképezőgépcsalád
- AMD Navi Radeon™ RX 9xxx sorozat
- 5.1, 7.1 és gamer fejhallgatók
- A fociról könnyedén, egy baráti társaságban
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Műholdakkal is beszélgethet a Redmi Note 15 Pro+
- Apple asztali gépek
- További aktív témák...
- ASUS ROG STRIX 850W 80 PLUS Gold - Garancia 2033.05.04
- Új Lenovo 14 Ideapad 5 FHD IPS i5-1235U 4.4Ghz 10mag 16GB 512GB SSD Intel Iris XE Win11 Garancia
- AMD Ryzen 7 5800X3D 8-Core 3.4GHz - AQUA garancia 2026.04.20
- Új HP 16 Elitebook 865 G10 WUXGA IPS Ryzen5 Pro 7540U 4.9Ghz 16GB 1TB Radeon 740M Win11 Pro Garancia
- Asus ROG Flow Z13 WUXGA 120Hz 2in1 Touch i9-12900H 14mag 16GB 512GB Nvidia RTX 3050Ti W11 Garancia
- Telefon felvásárlás!! Honor 400 Lite, Honor 400, Honor 400 Pro
- HP EliteDesk 800 G6 i5-10500T 8GB 256GB 1 év garancia
- Apple iPhone 13 Mini / 128GB / Gyárifüggetlen / 12Hó Garancia / 84% akku
- Gamer Notebook! Lenovo Ideapad Gaming3! I7 10750H / GTX 1650Ti / 8GB DDR4 / 256GB SSD
- Referencia Weboldallal Világítós bill+laptop bill magyarítás. Rania 3M -is! Touchpadok is.Posta ok
Állásajánlatok
Cég: FOTC
Város: Budapest