C++, expected class-name before '{' token

Permalänk
Medlem

C++, expected class-name before '{' token

Hej

Jag blir galen, skrivit om koden många gånger nu och samma fel.
Källa på YouTube
Mina kommentarer inkluderade, orkar inte ta bort dessa.
Tilläggas kan jag säga att jag kör Codeblocks.

Main

#include <iostream> #include "Airplane.h" #include "PassangerPlane.h" using namespace std; int main(){ PassangerPlane SAS("SAS"); SAS.printName(); }

Airplane.h

#ifndef AIRPLANE_H #define AIRPLANE_H #include <iostream> #include "PassangerPlane.h" using namespace std; class Airplane{ public: const string name; // constant variabel (man ska inte kunna ändra denna) Airplane(string name); // konstruktör ~Airplane(); // Dekonstruktör void land(); // funktion void takeoff(); // om jag skulle sätta "void takeoff();" under 'private' istället så skulle inte PassangerPlane kunna ärva detta, det är bara public delen dom går att ärva }; #endif

Airplane.cpp

#include "Airplane.h" #include <iostream> using namespace std; Airplane::Airplane(string pName/* argument*/) : name/*vi sparar ner värdet i konstantvaribel*/(pName){ cout << "Constructor Airplane" << endl; } Airplane::~Airplane(){ cout << "Airplane deconstructor" << endl; } void Airplane::land(){ cout << "I am going in for landing (Airplane)" << endl; } void Airplane::takeoff(){ cout << "Up up and away (Airplane)" << endl; }

PassangerPlane.h

#ifndef PASSANGERPLANE_H #define PASSANGERPLANE_H #include <iostream> #include "Airplane.h" using namespace std; class PassangerPlane : public Airplane{ /* Vi ärver Airplane classens 2 funktioner och variabeln och kan använda dom innanför våran PassangerPlane, allt det som vi ärver från Airplane ska anses vara public innanför vår PassangerPlane class, det vi ärver hamnar innanför public*/ public: PassangerPlane(string name); // När vi kommer till konstruktörer inom inheritance så utför c++ konstruktörerna innanför base classen först för att sedan köra konstruktörerna innanför derived class (sub class) ~PassangerPlane(); // Här är det det omvända som gäller för konstuk int seats; void servefood(); void printName(); // prototyp }; #endif

PassangerPlane.cpp

#include "PassangerPlane.h" #include "Airplane.h" #include <iostream> using namespace std; PassangerPlane::PassangerPlane(string pName) : Airplane(name){ cout << "Passangerplane constructor" << endl; } PassangerPlane::~PassangerPlane(){ cout << "PassangerPlane ~Deconstrucor" << endl; } void PassangerPlane::servefood(){ cout << "Here comes dinner! (PassangerPlane)" << endl; } void PassangerPlane::printName(){ cout << name << endl; }

Visa signatur

Ett härligt gäng med div. elektronik.
Marknadsreferenser | Rabattkoder | Dagens fynd | Övriga fynd

"The mediocre teacher tells, The good teacher explains, The superior teacher demonstrates but the great teacher inspires."

Permalänk
Medlem

Fundera på vad som händer när du lägger till "PassangerPlane.h" i filen "Airplane.h".

Visa signatur

.<

Permalänk

(Jag har ingen erfarenhet från c++ (skriver dock lite i java))
Jag tror du har glömt att skriva namnet på main klassen

Visa signatur

Ursäktar för stavfel

Permalänk
Medlem
Skrivet av oelrich:

Fundera på vad som händer när du lägger till "PassangerPlane.h" i filen "Airplane.h".

Helt rätt när jag tänker på det, helst meningslöst då man skriver att man ärver från den redan.
Vad som händer är att tänkta subclassen inte blir en subclass till basclassen, därmed vet inte c++ vilken class som avses?

Tack, vidare till nästa

Visa signatur

Ett härligt gäng med div. elektronik.
Marknadsreferenser | Rabattkoder | Dagens fynd | Övriga fynd

"The mediocre teacher tells, The good teacher explains, The superior teacher demonstrates but the great teacher inspires."

Permalänk

Vet ej som salt jag programerar i java inte c++

Visa signatur

Ursäktar för stavfel

Permalänk
Skrivet av JOANATAN5354:

Vet ej som salt jag programerar i java inte c++

Sakt

Visa signatur

Ursäktar för stavfel

Permalänk
Hedersmedlem
Skrivet av Zezo:

Vad som händer är att tänkta subclassen inte blir en subclass till basclassen, därmed vet inte c++ vilken class som avses?

Jodå, om man säger att man vill ärva kommer man att ärva, men däremot kommer PassangerPlane definieras före Airplane (då den inkluderas högt upp i filen), så kompilatorn vet inte vad det är man vill ärva från.

Permalänk
Medlem

Ett vanligt fel är även att du 1 includear 2 som includear 1, då kommer den gå i en evig "include loop". Ett tipps är att endast .cpp includear headers, en header bör aldrig göra detta.

*korrigera mig om jag har fel SweClockers. Detta är något som jag upptäckt själv och vet att många andra har problem med*

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB

Permalänk
Hedersmedlem
Skrivet av Pamudas:

Ett vanligt fel är även att du 1 includear 2 som includear 1, då kommer den gå i en evig "include loop". Ett tipps är att endast .cpp includear headers, en header bör aldrig göra detta.

*korrigera mig om jag har fel SweClockers. Detta är något som jag upptäckt själv och vet att många andra har problem med*

Just loop:ar kan man ju komma runt med ifndef-konstruktioner som ovan, men det kan ändå vara lämpligt att vara restriktiv med inkluderandet. Om inte annat för att större filer tar längre tid att kompilera och att risken för att man behöver kompilera om en fil ökar ju fler filer den beror av.

Permalänk
Medlem
Skrivet av Elgot:

Just loop:ar kan man ju komma runt med ifndef-konstruktioner som ovan, men det kan ändå vara lämpligt att vara restriktiv med inkluderandet. Om inte annat för att större filer tar längre tid att kompilera och att risken för att man behöver kompilera om en fil ökar ju fler filer den beror av.

Missade det där helt.. Tunnelseende hehe...

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB