Gå til innhold

Parse error feilmelding


Anbefalte innlegg

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 av kimla
Lenke til kommentar
Videoannonse
Annonse

#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

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
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

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 av kimla
Lenke til kommentar

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

Myubi: nice, ålreit å vite :)

 

Man lærer mens man lever :w00t:

 

EDIT:

Testa det litt jeg.. funka helt fint :D

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 av kimla
Lenke til kommentar

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 av kimla
Lenke til kommentar

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 av Kjeksen
Lenke til kommentar
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

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... :blush:

Endret av MapSter
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...