Problemer med constructor og object array

Tags:    c++

<< < 12 > >>
Hej Udvikleren
Jeg har i noget tid her på htx arbejdet på et teknologiprojekt. Jeg skal lave et alarmsystem. Dog skal jeg kun simulere det hele.
Jeg er nede på meget få fejl, og jeg kan simpelthen ikke løse dem.
Først en af de store problemer:
Jeg skal bruge et array til at oprette nye objecter. Arrayet hedder int nySensor[30]; Den har jeg i min klasse, da jeg skal have adgang til den i flere funktioner.
Følgende kode har jeg i funktionen, som opretter nye sensor objekter:
Fold kodeboks ind/udKode 

Ligemeget hvad jeg skriver foran erklæringen af arrayet i klassen giver det fejl, om jeg så bruger int, char, double, unsigned osv.
Fejlen er C2440, som lyder på at den ikke kan konvertere s til int. Grunden til at jeg skal have det i et array, er at brugeren skal have mulighed for at oprette x antal sensorer objekter.

Næste fejl er noget med pointere at gøre. Det skal siges at jeg ikke er særlig god til at programmere(endnu).
Har først følgende kode i klassen:
Fold kodeboks ind/udKode 

Funktionen er:
Fold kodeboks ind/udKode 

Så bruger jeg følgende kode til at sende numrene i nySensors array.
Fold kodeboks ind/udKode 


Meningen er blot at sende tal informationer til funktionen, så den kan benytte dem til at skrive informationer om den specifikke sensor.


Håber i kan Hjælpe.
Hilsen Søren Qvist




13 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Jeg ved ikke om du har løst dit problem eller om det her link overhovedet svarer på nogle af dine spørgsmål. Jeg faldt dog lige over det her nu mens jeg sad og browsede min nyheder : http://www.augustcouncil.com/~tgibson/tutorial/ptr.html - skulle gerne hjælpe en del med at forstå pointers. Held og lykke.



Ja, det ville være rart at se noget mere kode. Nu er jeg ikke ekspert ud i C++, men jeg tror ikke man kan skrive denne linje for sig selv:
Fold kodeboks ind/udKode 

Vis du vil lave et sensor object ser koden sådan her ud:
Fold kodeboks ind/udKode 

Det er nu det er smart vis klassen starter med stort. Så kan man have objektet sensor af typen Sensor. Vis det ikke er klart, så antager denne linje at din klasse starter med stort. Det ser ud som om at den gør det nu.
Det at ændre navnet på en klasse giver tit problemer, da man så skal ændre alle de steder man bruger klassen i koden. Det ser ud til du har glemt det her:
Fold kodeboks ind/udKode 

Prøv
Fold kodeboks ind/udKode 

istedet for.



int nySensor[30]; <- denne kode laver et array af int. Du vil have et array af sensor. for at gøre det skal du skrive:
sensor nySensor[30];

Det er en god ide at navngive ens klasser så de starter med stort, det går det lettere at se hvad der er objecter og hvad der er klasser.

Vis jeg forstår dit andet problem rigtigt, er der mange fejl. De tre kodestumper skal nok se sådan her ud:

void sendMsg(int *nr, int *nr2, int *nr3);

void senser::sendMsg(int *nr, int *nr2, int *nr3);

Den sidste er rigtig nok, men du skal være sikker på at i, ii og iii er pointere. Vis de ikke er skal du sætte et & tegn foran.



Har ændret klassenavn til Sensor.
sensor nySensor[30]; var min lærer også indepå, men det giver et par stykker nye fejl:
Den mangler pludselig int(eller anden) foran denne sætning:
Fold kodeboks ind/udKode 

og foran denne:
Fold kodeboks ind/udKode 

Skal jeg bare gøre det den beder om?
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int



Vi bliver nok nødt til at se noget mere kode, for at kunne fortælle dig hvad problemet er.
Det første ligner en constructor i class'en, og burde være ok, der ser heller ikke ud til at være problemer med den anden.



Ha. Jeg troede jeg skulle bruge min construktor: sensor, med lille "s". ved nySensor arrayet.
Jeg forstår dog ikke, hvorfor jeg skal skrive klassenavnet foran construktoren og arrayet, når de allerede befinder sig i sensoren??
Kigger lige på de forslag du er kommet med og skriver tilbage imorgen.



Jeg har fulgt dine råd, og det giver flere fejl, jeg ikke forstår. Her er hele loggen:
Fold kodeboks ind/udKode 

I bedte også om mere kode, så poster lige klassen og funktionen, der skal oprette objekterne:
Fold kodeboks ind/udKode 

Fold kodeboks ind/udKode 




I class'en Sensor forsøger du at oprette et array af 30 objekter af typen Sensor (nySensor). Det går ikke. En struct eller class kan ikke have elementer af sin egen type. En class eller struct kan godt have pointere til objekter af sin egen type, men det er næppe det du har brug for her.

Oftest har man en container til at holde styr på andre objekter. Hvis man f.eks. skal lave en Bil class vil den kunne indholde et array af 4 Hjul objekter, men Hjul vil normalt ikke have arrays af sig selv.

I dit tilfælde betyder det nok at du skal dele Sensor class'en op i to, en der indeholder variabler og funktioner for én Sensor og en anden class der holder styr på alle dine sensorer.

void Sensor::reg_sensor(void)
Kunne således oprette et Sensor objekt og returnere det til den der holder styr på sensorerne.



Holde styr på alle sensor objekterne??? Har du noget eksempel kode, så jeg kan se hvordan man gør sådan noget? :D



Du kunne lave noget i stil med:
Fold kodeboks ind/udKode 

CreateSensor skal så lave ca. det samme som reg_sensor gjorde, men returnere et Sensor objekt.

reg_sensor skal fjernes fra Sensor.



Indlæg senest redigeret d. 21.03.2010 14:51 af Bruger #4996
<< < 12 > >>
t