Löste det... Med att lägga till detta i klassen peron:
public:
person(int val);
och detta i main: person minPerson(0);
En fråga nu är, måste man göra på detta sätt eller kan man göra på något annat sätt?
Tack på förhand!
19 svar · 356 visningar · startad av Mc Fetto
Har precis börjat med objektorientering så det är nog inget svårt fel men jag fattar inte vad felet är. Är det någon som vill hjälpa mig? Här kommer min kod:
include <iostream>
using namespace std;
class person {
void getPerson();
void putPerson();
private:
char pnr[11];
char name[31];
char adress[31];
char tfn[11];
};
void person::getPerson() {
char c;
cout\<\<"Ange ditt personnummer: ";
cin.get(pnr, 11,'\\n');
cin.get(c);
cout\<\<"Ange ditt namn: ";
cin.get(name, 31, '\\n');
cin.get(c);
cout\<\<"Ange din adress: ";
cin.get(adress, 31, '\\n');
cin.get(c);
cout\<\<"Ange telefonnummer: ";
cin.get(tfn, 31, '\\n');
cin.get(c);
}
void person::putPerson() {
cout\<\<"Personnr: " \<\<pnr\<\<'\\n';
cout\<\<"Namn: " \<\<name\<\<'\\n';
cout\<\<"Adress: " \<\<adress\<\<'\\n';
cout\<\<"Telefonnr: " \<\<tfn \<\<'\\n';
}
int main() {
person minPerson();
minPerson.getPerson();
minPerson.putPerson();
return 0;
}
kompilatorn klagar på de två raderna i main som är innan return 0
felmedelande: error C2228: left of '.getPerson' must have class/struct/union type
Löste det... Med att lägga till detta i klassen peron:
public:
person(int val);
och detta i main: person minPerson(0);
En fråga nu är, måste man göra på detta sätt eller kan man göra på något annat sätt?
Tack på förhand!
Ja, du borde kunna ha haft som innan och skrivit:
person minPerson;
utan paranteser. På så sätt hade du utnyttjat den defaultkonstruktor kompilatorn skapar åt dig. Har jag för mig ..
provade utan paranteser innan men det funkade inte heller!!
Sant PeW, missade det :(
Usäkta niko, det gjorde det nu.. måste ha förvirrat mig tidigare ;)
Re: saknar class, men vad är felet?
Mc Fetto skrev:
...Här kommer min kod:...
...
class person {
void getPerson();
void putPerson();
private:
char pnr[11];
char name[31];
char adress[31];
char tfn[11];
};
...
Jag ser något du kanske kan få problem med snart... För en klass är defaultåtkomst satt till private. Alltså är även metoderna getPerson() och putPerson() privata i lika hög grad som variablerna som explicit deklarerats private. Du har mao enbart deklarerat privata "saker". Om du vill att metoderna ska vara public måste du skriva det.
För att få det mer korrekt, så ska variablerna vara privata och att man fyller dessa m.h.a konstruktorn. För att sen hämta respektive post definierar man metoder för det.
Mao så ska klassen person laddas med uppgifterna när den skapas - inte genom en metod efter det att typen person deklarerats.
Pseudo:
class person {
private:
mina variabler t_a, t_b,t_b
public:
person(){}
person(var a, var b,var c):t_a(a),t_b(b),t_c(c){}
~person();
void printPerson();
}
main:
person myNewPerson = new person(n_a,n_b,n_c);
Nu var det strängar så lämplig kopieringsfunktionalitet måste till i konstruktorn, snarare än tilldelning som ovan pseudo gör.
Tackar killar, fick för mig att det man inte deklarerade till ngt var publict men ack så fel man kan ha :)
Tänk på vilket ansvar klassen person ska ha. Som det är nu ska personen själv ta reda på vad den heter och personnummer. Är det inte mer naturligt att en person har detta redan när den skapas (i konstruktorn)?
OO är inte bara ytterligare en kodningsteknik, utan ett sätt att modellera och kapsla in. :)
Japp, jag får ta och läsa lite mer om OO, så jag får in tankesättet på en gång :)
I olika inlägg:
Mc Fetto skrev:
Tackar killar, fick för mig att det man inte deklarerade till ngt var publict men ack så fel man kan ha
....
Japp, jag får ta och läsa lite mer om OO, så jag får in tankesättet på en gång :)
Ett tips är att skaffa en grundläggande bok om C++, då står där nästan säkert en hel del om OO också. En bok som kan relommenderas till en nybörjare är: C++ Primer Third Edition av Stanley B. Lippman, Josée Lajoie. Den går igenom grunderna i C++, avancerad C++ och det mesta däremellan, grunderna i programmering allmänt, dessutom hur man programmerar enligt procedurorientering, objektbaserat - vad de nu menar med det - samt OO. Den kostar nog en del men innehåller också massor! Jag har den själv. Vet inte om den finns på svenska eller ej. Den finns definitivt på engelska.
(Jag skulle uppskatta att inte bli refererad till som "kille"... ;) )
Andra bra nybörjarböcker är "C++ Direkt" av J.Skansholm och "C++ programming" av S.Pratha :)
aasah skrev:
(Jag skulle uppskatta att inte bli refererad till som "kille"... ;) )
Ursäkta, det var inte menat på något negativt sätt alls! :)
Jag har redan en bok Absolute c++ av Walter Savitch, då denna bok ingår i en kurs jag går! Den är rätt ny så jag hoppas den är ok!
Tack för all hjälp och och tips :)
jag hoppas den är ok!
Hoppas jag med, då det finns en uppsjö av c++ böcker, men få belyser OOP:n ;)
Men borde det då inte finnas böcker som endast tar upp OOP:n rent generelt utan att binda till ett specefikt språk? Detta vore bra då jag samtidigt läser en java kurs!
Mc Fetto skrev:
Men borde det då inte finnas böcker som endast tar upp OOP:n rent generelt utan att binda till ett specefikt språk? Detta vore bra då jag samtidigt läser en java kurs!
Jag tror att det är ganska svårt att hitta en sådan bok. För att förklara och exemplifiera så måste man kunna ge kodexempel. Lite svårt om inget programmeringsspråk får användas... Sedan har ju varje språk sina egna egenheter, jag tror ingen är bekänt av en bok som måste rabbla upp kodsnuttar på ett otal olika språk för att få det generellt.
Å andra sidan har jag mycket svårt att föreställa mig en bok i Java som inte tar upp OOP, såvida det är en grundläggande bok. Men det kanske är fel?
I den rena OOP kurs jag gick användes Timothy Budd's "An Introduction to Object-Oriented Programming ", vilken ansågs vara bra. OO är inte språkbundet, men däremot är implementationen det. För att förstå OOP tror jag att det är bra om man håller sig så generell som möjligt och undviker att exemplifiera med körbar kod.
Ska ta en titt på den boken, tack så mycket!