Tjena, har gjort en vektor som innehåller en klass "Bok" som lagrar info om böcker! Nu vill jag kunna skriva ut vektorn, fast de platserna i vektorn som har någon klass "Bok" lagrad vill jag skriva ut att den är tom istället (se nedan)!
for (int i = 0; i < max;i++) {
if (firstPointer[i] != '\n'){
cout<<"NULL"<<'\n';
cout<<i<<max<<'\n';
}
else
putBok(firstPointer[i]);
}
Det är alltså vad jag ska skriva istället för : '\n' jag vill åt (om det går!).
Då får jag följande felmedelande vid kompilering : error C2676: binary '!=' : 'class Bok' does not define this operator or a conversion to a type acceptable to the predefined operator
Är firstPointer en array av objekt eller en array av strängar? Av ditt felmeddelande att dömma så försöker testa om ett objekt != '\n' ... vilket inte funkar om du inte lagt in operatoröverlagring för objektet. Vad är det du vill göra, lite mer exakt?
Oki
Om du vill skriva ut info om boken bör du lägga in en info-variabel (private) och göra en metod som skriver ut denna. Default (genom konstruktorn) kan du sätta denna info till 0. Då kan du lätt i din iteration anropa firstPointer*._metoden() för att kolla om det är 0 eller om det finns en sträng.*
Bättre att kolla om det finns ett objekt ö.h.t genom iterationen och om det gör det anropa info-metoden. Detta för att du rimligtvis skapar all data genom konstruktorn ist för att skapa tomma böcker.
Skriva ut boken gör jag redan med putBok(minBok); !! Ska jag göra den private menar du? Om, isf blir det problem då jag kallar på putBok ifrån en annan klass!
Nja.. variabeln (infosträngen) vill jag ha till private - inte metoden. Men du kan inte testa om det existerar nån bok genom !='\n' , utan isf är det bättre att sätta alla index till 0 och helt enkelt checka om firstPointer genom
if(firstPointer) utan några !='\n'.**
Det känns inte som du hänger med i PeW resonemang riktigt. Vad han försöker säga är att du kan inte kolla om ett Bok objekt är '\0' eftersom att '\0' är av typen char inte av typen Bok. Vad du får göra då är att lägga till en ny public funktion som kollar om boken är tom genom att läsa av en privat variabel
[kod]
class bok
public:
bok() //konstruktor som initierar emptyBook till false
funktioner()...
isEmpty() //lägg till funktion som kollar ifall boken är tom.
private:
atribut...
bool emptyBook;
genom att sedan initiera alla objekt till emptyBook = false med en konstrukor och senare ändra emptyBook till true när du lägger till en bok så kan du kolla ifall bok objektet är tomt...
Blev lite snurrigt på slutet kanske...men jag hoppas att du fattade nåt i alla fall.
Ungefär så. Springande punkten är att ett objekt är en egen datatyp och char en annan datatyp. Du försökte nu jämföra 2 helt olika saker med varandra och det är dömt att misslyckas. Eller vad sägs om att kolla i bollnätet efter 1 liter vatten?
Fast däremot så skulle jag inte använda termer som att en bok är tom. Vad är det för bok? De metoder som ovan beskrevs passar bättre för det som tillhandahåller böcker.. dvs så är det bättre att isf symbolisera arrayen med en bokhylla som har platser för böcker som i sig alltid är fulla med text (utan att texten kan ändras)... ;)
Sen kan du alltid sätta arrayens alla element till 0 vid initieringen (vilket är detsamma som false). Om du sen tar bort en bok är det till att på nytt sätta den indexen till 0. Lite klumpigt, men så är det med statiska arrayer och i detta fall vore det mer lämpligt med en dynamisk (stl-vector). Anledningen är att du vill ju iterera samlingen av böcker (i bokhyllan) för att se om det finns nån bok. Hittas en bok är det bara att kolla dess info.
Med ovan i åtanke kan man lätt dra slutsatsen att en bok skapas till fullo vid skapandet av objektet "bok". Dvs att all dess information som textmassa, författare, år m.m.. rimligtvis bör endast initieras i dess konstruktor. Eftersom all denna data är oföränderlig ska dess variabler vara privata. För att accessa denna data skapar man lite metoder.. (getAuthor(), getYear()... m.m). Så om man gjort detta är det bara att iterera sin array med firstPointer*.getAuthor()... eller vad det nu är. Men eftersom det vore helt galet att accessa en tom plats med detta behövs en koll om det finns nån bok.
Om man inte initerar sin array korrekt är det en risk att man får skräpvärden så därav mitt förslag om att sätta alla tomma index till 0.*
Varför det? Jag tycker calloc respektive malloc funkar jättebra. Även om dessa kanske inte är standard så använder jag dessa. Realloc är jag ändå lite skeptisk över eftersom jag oftast får minnesfel med denna.