kimla Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 (endret) Hey. trenger litt hjelp her, er ikke noe god med C++, og bare prøver meg ut med classes. #include <stdio.h> #include <iostream.h> #include <string.h> class calc // class for calculating... stuff { private: int num1; int num2; int choice; int result; public: void choices() // checks what your choice is (add, substract etc) { cout << "First number: "; cin >> num1; cout << "\n"; cout << "Second number: "; cin >> num2; cout << "\n"; cout << "Do you want to:\n"; cout << "1: Add" << endl; cout << "2: Substract" << endl; cout << "3: Multiply" << endl; cout << "4: Divide " << endl; cin >> choice; }; int calculate() // calculates your choice { if(calc::choice == 1) { result = num1 + num2; } else if(calc::choice == 2) { result = num1 - num2; } else if(calc::choice == 3) { result = num1 * num2; } else if(calc::choice == 4) { result = num1 / num2; } cout << result; getchar(); }; }; int main(int argc, char *argv[]) { calc.choices(); // Here is where i get the parse error. "Parse error before `.' calc.calculate(); return 0; } Hvorfor får jeg den feilmeldinga? Takker for alle høflige/hyggelige/konstruktive svar (Husk at jeg er noob...) EDIT: Jeg har skrevet det på Engelsk pga at jeg vil legge til meg den vanen, og at jeg tenkte å poste problemet på en engelsk side originalt. Endret 9. juni 2005 av kimla Lenke til kommentar
Kjeksen Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 #include <stdio.h> #include <iostream.h> #include <string.h> class calc // class for calculating... stuff { private: int num1; int num2; int choice; int result; public: void choices() // checks what your choice is (add, substract etc) { cout << "First number: "; cin >> num1; cout << "\n"; cout << "Second number: "; cin >> num2; cout << "\n"; cout << "Do you want to:\n"; cout << "1: Add" << endl; cout << "2: Substract" << endl; cout << "3: Multiply" << endl; cout << "4: Divide " << endl; cin >> choice; }; int calculate() // calculates your choice { if(calc::choice == 1) { result = num1 + num2; } else if(calc::choice == 2) { result = num1 - num2; } else if(calc::choice == 3) { result = num1 * num2; } else if(calc::choice == 4) { result = num1 / num2; } cout << result; getchar(); }; }; int main(int argc, char *argv[]) { calc c; c.choices(); // Here is where i get the parse error. "Parse error before `.' c.calculate(); return 0; } du hadde glemt og lage et objekt av klassen calc Lenke til kommentar
kimla Skrevet 9. juni 2005 Forfatter Del Skrevet 9. juni 2005 Tøft, første gang jeg har prøvd meg på klasser Lenke til kommentar
☀ ❄ Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 Du må instansiere et objekt av klassen calc: calc c; c.choices(); c.calculate(); (Kjeksen kom meg i forkjøpet. Jaja.) For øvrig: - Bruk nye headere (<iostream> fremfor <iostream.h> osv) - Ikke bruk implisitte inline funksjoner med mindre det er snakk om veldig små funksjoner - Funksjonsdefinisjoner skal ikke slutte med semikolon (det er ikke direkte galt, men det ser amatørmessig ut) Lenke til kommentar
kimla Skrevet 10. juni 2005 Forfatter Del Skrevet 10. juni 2005 Du må instansiere et objekt av klassen calc: calc c; c.choices(); c.calculate(); (Kjeksen kom meg i forkjøpet. Jaja.) For øvrig: - Bruk nye headere (<iostream> fremfor <iostream.h> osv) - Ikke bruk implisitte inline funksjoner med mindre det er snakk om veldig små funksjoner - Funksjonsdefinisjoner skal ikke slutte med semikolon (det er ikke direkte galt, men det ser amatørmessig ut) Yeah, er en stund siden det her, stemmer det med <iostream> istedenfor <iostream.h>. Og hva er implisitte inline funksjoner? - Funksjonsdefinisjoner skal ikke slutte med semikolon (det er ikke direkte galt, men det ser amatørmessig ut) <- du mener medlemsfunksjoner, eller funksjoner generelt? Lenke til kommentar
Peter Skrevet 10. juni 2005 Del Skrevet 10. juni 2005 Generelt. Du trenger ikke semikolon etter en funksjonsdefinisjon, kun etter funksjonsdeklarasjon. Lenke til kommentar
GeirGrusom Skrevet 10. juni 2005 Del Skrevet 10. juni 2005 Trodde det også ga compile feil... Lenke til kommentar
kimla Skrevet 10. juni 2005 Forfatter Del Skrevet 10. juni 2005 (endret) GeirGrusom: Dev-c++ bruker vel gcc, så stoler jo på at det er rett da, kan være det er forskjellig fra vanlige funksjoner og medlemsfunksjoner... mens det fremdeles er folk som ser på denne tråden så kan dere kanskje hjelpe meg litt til (tenkte det var bedre enn å starte en ny tråd som er ganske lik). #include <stdio.h> #include <iostream> #include <string> // i don't know how to write veichle... sorry class veichle { string wheels; // twoWheel or fourWheel string type; // regular or sport }; class car extends veichle { /* her kommer syntax error. Fins det 'extends' i C++ forresten? /* void writeOptions() { cout << wheels << endl; cout << type << endl; } }; class sportCar extends veichle { string wheels = "twoWheel"; string type = "Sportmodel"; void writeOptions() { cout << wheels << endl; cout << type << endl; } } int main(int argc, char *argv[]) { car c; sport s; c.writeOptions(); s.writeOptions(); return 0; } Får syntax error: 11 carengine.cpp syntax error before `{' EDIT: får syntax error på andre ting også, men tenkte det kanskje hadde sammenheng så ville bare prøve å få til den første så er kanskje de andre like "lette" Endret 10. juni 2005 av kimla Lenke til kommentar
☀ ❄ Skrevet 10. juni 2005 Del Skrevet 10. juni 2005 Offentlig arv i C++ uttrykkes slik: class Base { }; class Derived : public Base { }; Du skal aldri ha semikolon etter en funksjonsdefinisjon, enten det er medlemsfunksjon eller ikke. Implisitte inline funksjoner er funksjoner med definisjonen inne i klassedefinisjonen. Altså: class My_class { public: void implicit_inline() { std::cout << "Hello, I've just arrived in my fantastic boat!\n"; } void not_inline(); }; void My_class::not_inline() { std::cout << "Sommartider hey hey, sommartider\n"; // Mer kode som gjør at en ikke burde ha denne funksjonen inline } Det siste eksempelet er den riktige måten å behandle større funksjoner på. For øvrig skrives det vehicle Lenke til kommentar
kimla Skrevet 11. juni 2005 Forfatter Del Skrevet 11. juni 2005 (endret) Myubi: nice, ålreit å vite Man lærer mens man lever EDIT: Testa det litt jeg.. funka helt fint C++ er så deilig genialt språk #include <cstdlib> #include <iostream> #include <string> using namespace std; class vehicle { public: void wheels(string wheelType) { cout << wheelType << endl; } }; class bike : public vehicle { public: vehicle v; void treeStructure() { v.wheels("twoWheel"); } }; int main(int argc, char *argv[]) { bike b; b.treeStructure(); getchar(); return EXIT_SUCCESS; } Kanskje litt mye for å få frem "twoWheel", men er deilig å teste ting som funker Endret 11. juni 2005 av kimla Lenke til kommentar
☀ ❄ Skrevet 11. juni 2005 Del Skrevet 11. juni 2005 C++ er så deilig genialt språk Jeg anbefaler The Design and Evolution of C++. I den forklarer Bjarne hvorfor ting er som de er. Først når du har lest den forstår du virkelig hvor fantastisk C++ egentlig er Lenke til kommentar
kimla Skrevet 11. juni 2005 Forfatter Del Skrevet 11. juni 2005 (endret) Myubi: Prøvde måten din med medlemsfunksjonene skrevet utenfor klassene, funka dårlig for min del... hva gjør jeg feil: #include <cstdlib> #include <iostream> #include <string> #include <time.h> using namespace std; class vehicle { public: ///////////////////////////// //Highest class. Superclass// ///////////////////////////// // FUNCTIONS: sleep(), defaultProperties(), defaultAcceleration void defaultProperties(); void defaultAcceleration(); void sleep(unsigned int mseconds) { clock_t goal = mseconds + clock(); while (goal > clock()); } }; void vehicle::defaultAcceleration(float accelStart, float accelStop, float accelSeconds) { // belongs to vehicle class. // Determends the acceleration of the vehicle // from start(STARTACCEL) to acceleration stops(accelStop) in the amount // of seconds specified(accelSeconds). // EXAMPLE: 0 to 100.0 in 10 seconds. (It's a little above regular;)) for(accelStart=0;accelStart<accelStop;accelStart++) { float accelPerSecond = accelStop / accelSeconds; float result = accelPerSecond * 1000; sleep(result); } } void vehicle::defaultProperties() { // belongs to vehicle class bool clutchIsActive = false; string color = "Black"; int doors = 4; } class bike : public vehicle { public: void accelerate() { defaultAcceleration(0,100,60); } }; int main(int argc, char *argv[]) { bike b; b.accelerate(); return 0; } Feilmelding: 24 C:\Dev-Cpp\main.cpp ISO C++ forbids declaration of `defaultAcceleration' with no type. Fikk ordna den nå, endra defaultAcceleration() i vehicle klassen vil defaultAcceleration(float, float, float). men får en ny en nå som ikke har noe linjenummer: C:\Dev-Cpp\main.cpp In member function `void vehicle::defaultAcceleration(float, float, float)': Endret 11. juni 2005 av kimla Lenke til kommentar
Kjeksen Skrevet 13. juni 2005 Del Skrevet 13. juni 2005 (endret) Fikk et par feilmeldinger ja. Fikk denne: 34 C:\Dev-Cpp\main.cpp [Warning] passing `float' for converting 1 of `void vehicle::sleep(unsigned int)' Det kan du fikse ved å bruke int istedenfor float. Endret 13. juni 2005 av Kjeksen Lenke til kommentar
kimla Skrevet 13. juni 2005 Forfatter Del Skrevet 13. juni 2005 Fikk et par feilmeldinger ja. Fikk denne: 34 C:\Dev-Cpp\main.cpp [Warning] passing `float' for converting 1 of `void vehicle::sleep(unsigned int)' Det kan du fikse ved å bruke int istedenfor float. yeah, har fiksa den. Måtte gjøre om resultatet til int ja. Men mattestykket er ikke helt hundre, så må bare finne ut om jeg gidder å gjøre det ferdig. Var for det meste et øvingsprosjekt for klasser det her. Lenke til kommentar
Mapster Skrevet 15. juni 2005 Del Skrevet 15. juni 2005 (endret) Feilmeldingene har gjerne noe å gjøre med at funksjons deklarasjonene i classen ikke inneholder variablene du skal bruke i funksjonen: Altså funksjonen defaultAcceleration() deklareres slik: class vehicle { public: void defaultAcceleration( float accelStart, float accelStop, float accelSeconds); ... ... }; edit: fjærnet en liten skrivefeil... Endret 16. juni 2005 av MapSter Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå