Új hozzászólás Aktív témák
-
Jester01
veterán
strcmp: <0 =0 >0 értéket add vissza attól függően, hogy az első string kisebb, egyenlő vagy nagyobb mint a második. compare fv-t nem tudom honnan vetted, nincs a feladatban.
strstr igazából az strchr-hez hasonlóan pozíciót kellene visszaadjon mivel a te implementációdban a char*-nak szerintem semmi értelme. -
Jester01
veterán
* Az strcmp az nem boolean visszatérési értékű kellene legyen. Ha a compare viszont igen, akkor az nyugodtan hívhatja az strcmp-t.
* Az strcmp-ben a if (i==s1.elementsNum-1) feltétel elég borzasztó, elég lenne a ciklus után visszaadni igaz értéket
* rendszeresen nem szabadítod fel az előző tartalmat
* hiányzik a lezáró 0 byte a concatenate fvben
* if(not) return false; else return true; ilyet ne csinálj már
* strchr nem mindig ad vissza értéket, de ha igen, akkor biztos, hogy kell a +1 ?
* az strstr gyakorlatilag halvaszületett
Első ránézésre ennyi. -
caddie
csendes tag
Azt hiszem, hogy a problemak egy reszet mar leirtak, en meg javasolnek 1-2 dologt:
- nagyon nem illik a headerekbe a using namespace std;-t beleirni
- a standard konyvtar definial egy vector template osztalyt, majdnem azonos neven
- a kiiro operator definialasakor te igazabol egy free (''globalis'') fuggvenyt definialsz, amely egyik parametere template osztaly. ebbol kifolyolag az altalad definialt kiiro operatornak is templatenek kell lennie (alatta ki is van kommentezve)
- konstruktoroknal erdemes hasznalni az inicializalasi listat (ezzel kikerulheto a telejsen felesleges default konstrualas es az ezuatni ertekadas)
- unsigned int-ek helyett, erdemes hasznalni az STL-hoz hasonloan a size_t tipust
- ertekado operatorok tipikusan T& ternek vissza a lancbafuzes tamogatasa miatt, de persze lehet, neked pont az volt a celod, hogy ilyen dolgokat ne engedj meg
- mivel letezik a vektor meretenek lekerdezesere kialakitott interface (size()), ezert velemenyem szerint felesleges a kiiro template operatort friendkent deklaralni
- a NULL nem szabvanyos! nullat hasznalj helyette
- a copy konstruktort biztos igy akartad csinalni?
{
Vector<int> a;
// a-t feltoltod elemekkel
Vector<int>b(a);
}
// megsemmisul a, felszabadul a.pData;
// felszabadul(na) b.pData;
// de mivel a.pData == b.pData ami mar megsemmisult,
// ehelyett katasztrofa lesz
// alternativ eset
a.clear(); // felszabadul a.pData (b.pData is oda mutat)
b[5];
// szerencses esetben elcrachel a programod
// peches esetben pedig fut tovabb csak hulyeseg irodik ki
// megpechesebb esetben jo irodik ki
// klasszikus undefined behaviour
- copy konstruktor egyertelmuen hibas
- assert.h helyett majd inkabb cassert-et hasznald
- erase eseten, ha egy elemed volt akkor -1-re alitod az elemenNum-t
- postfix increment / decrementalas helyett erdemes a prefixet hasznalni (ahol persze azonos a ketto funkcionalitasa)
- erase eseteben a torlendo elem kihagyasa nem tul elengas, sott gyanus, hogy a for ciklusnal a ciklusfeltetel tulindexelest fog eredmenyezni
- insert-nel erdemes lenne const T& -et atadni
- ennek nem latom sok ertelmet:
if(elementNum==UINT_MAX)
{
return false;
}
de ha mar ilyenekre figyelsz, akkor erdemes lenne inkabb a C++ std altal biztositott dolgokat hasznalni, tovabba inkabb a new sikeres memoriafoglalasat ''leellenorizni''* (bar egy beadando eseteben egyiknek sincs tul sok jelentosege)
* erdemes eszrevenni, hogy alap esetben std::bad_alloc exceptiont dob, de nothrow-os valtozat hasznalataval ra lehet venni arra is, hogy nullpointert adjon vissza sikertelen foglalas eseten
- insertnel megint az kell, hogy modnjam, hogy ez nem tul elegans modja az elem beszuarasanak
- insertnel ha pos > mint az aktualis vektor merete, akkor ne egyenkent toltsd fel nullaval, hanem default konstruald nullaval inkabb
- insertnel nem latom pontosan, hogy miert pos + 1 meretu tombot foglalsz
- [] operator eseteben az az altalanos STLes megkozelites, hogy [] nem ellenoriz indexhatarokat, csak at teszi azt, igy az at fuggvenyt a [] segitsegevel valositjak meg.
- eddig sem lattam sok ertelmet az asserteknek, az amlitett dolgok nem olyan hibak amiert le kene shutdownolni az egesz programot, de ertekado operator eseteben egyenesen a jozan esz ellen megy. Abban az esetben inkabb egy return *this; kellene, amennyiben onertekadasrol lenne szo
Igy elso atfutasra en ezeket a furcsasagokat vettem eszre, nehany kozulok talan csak sznobizmus, de azert akadt kozottuk par tervezesi hiba es eletveszelyes undefined behaviour is.
[Szerkesztve] -
Jester01
veterán
Az a <class T> az olyan mint a függvényeknek (vagy makróknak) a paramétere. Tehát a T az tetszõleges név lehet. Az egész úgy mûködik, hogy a T helyére a példányosítás során adott osztályokat (típusokat) helyettesít be. A te kódodban Vector osztály nem létezik, az csak egy minta (template). Tehát igazából sehova sem írhatod azt, hogy Vector, mindenhol meg kell adnod a behelyettesítendõ típust vagy konkrétan vagy pedig template paraméterrel (ez alól azt hiszem vannak kivételek, de olyanról nem tudok, hogy ne lehetne kiírni -- vagyis az a biztos ha mindenhová kiírod).
Ezen felül csak annyi hiba volt a progiban, hogy hiányzott az assert.h és az operator<< visszatérési típusánál egy helyen lemaradt az & jel, valamint a friend deklarációnál is kell a template kulcsszó. -
bpx
őstag
ezt még fordítani sem tudom, egyszerűbb ha felteszed a forrásfájlt vhova
(smile-kat + stringkonstansokat még visszairogattam, de így is elég sok errort dob, pl. char*-nak adsz chart értékül, vagy char*-ot hasonlítasz össze char-ral)
vagy pl. egy helyen így inicializál stringet:
String::String(char c, unsigned int times)
{
elementsNum=times;
pData=new char[elementsNum+1];
for(unsigned int i=0;i<elementsNum;i++)
pData=c; // pData az char* típusú
// esetleg pData = c; a fenti helyett
pData[elementsNum]='\0';
}
[Szerkesztve] -
Jester01
veterán
Az Exception osztálynak nincs olyan konstruktora, ami egy másik Exception-t fogad paraméternek. A copy constructor szignatúrája így néz ki:
Exception(const Exception& source)
MOD: ha te nem csinálsz ilyet akkor a fordító generál egyet. De az tagonkénti értékadás lesz így aztán több példány is ugyanazt a message tagot fogja használni és mindegyik fel akarja szabadítani. Le kell másolni.
[Szerkesztve] -
Jester01
veterán
Rengeteg baj van vele, sört nem szeretem és azt se ha valaki több topikba is beírja ugyanazt.
Mindenesetre az elsõ 2 probléma (futásidei sorrendben)
1) v1.erase(12) miatt exception lesz hiszen csak 10 elem van a vektorban (szerintem tévedésbõl felcserélted a 2 sort)
2) az Exception osztályodnak nincs copy constructora, emiatt (és mert nem dinamikus példányt hozol létre) a message kétszer lesz felszabadítva. -
Jester01
veterán
// main
void main ()
... helyett ...
int main (int, char**)
(és persze return 0; a végére)
for(int i=0;i=9;i++)
... helyett ...
for(int i=0;i<=9;i++)
// fifo.cpp
tmp[elementnum-1]=n;
... helyett ...
tmp[elementnum]=n;
fifo::pop ()
... helyett ...
int fifo::pop ()
x=t[elementnum];
... helyett ...
x=t[elementnum - 1];
Ú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!
- Ez lenne a népkártya? Teszten a GeForce RTX 5060 Ti 16 GB
- Mass Effect
- Crohn betegség
- PROHARDVER! feedback: bugok, problémák, ötletek
- PlayStation 4
- Formula-1
- FOTÓS beárazás
- Háztartási gépek
- Az AMD-vel tervezi a következő generációs Xboxokat a Microsoft
- RETRO beárazás (mobil, PC, konzol)
- További aktív témák...
- BESZÁMÍTÁS! Asus B760M i7 12700KF 32GB DDR4 512GB SSD RX 6800 16GB Rampage SHIVA FSP 700W
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- BESZÁMÍTÁS! GIGABYTE H77-DS3H H77 chipset alaplap garanciával hibátlan működéssel
- Nintendo Switch bazár (Okosított Nintendo Switch konzolok, játékok, tartozékok)
- Bomba ár! Dell Inspiron 15 3511 - i5-11GEN I 8GB I 256SSD I HDMI I 15,6" FHD I Cam I W11 I Gari
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest