error C2061: Syntaxfehler: Bezeichner



  • Hallo ich bekomme einen haufen an Fehlermeldungen ich hoffe es kann mir jemand weiterhelfen.

    Ich habe folgende Klassen:
    -Order
    -Product
    -Customer
    ---------------------------------------------------------------------
    //Order.h

    #pragma once
    #include <iostream>
    #include <string>
    #include "Customer.h"
    #include "Product.h"
    #include <vector>
    
    using namespace std;
    class Order
    {
    public:
    	Order(void);
    	Order(Customer*);
    	~Order(void);
    
    	void addProduct(Product*);
    	double computeOrderPrice();
    	void sort();
    	void print();
    
    private:
    	int numberCounter;
    	int number;
    	Customer* customer;
    	vector<Product*>products;
    };
    

    --------------------------------------------------------------------------

    //Product.h

    #pragma once
    #include "Order.h"
    
    class Product
    {
    public:
    	Product(void);
    	Product(int, string, double);
    	~Product(void);
    	void print();
    
    	void setNumber(int);
    	void setName(string);
    	void setPrice(double);
    
    	int getNumber(void);
    	string getName(void);
    	double getPrice(void);
    
    private:
    	int number;
    	string name;
    	double price;
    
    };
    

    -----------------------------------------------------------

    #pragma once
    #include "Order.h"
    using namespace std;
    
    class Customer
    {
    public:
    	Customer(int, string, string);
    	~Customer(void);
    	void print();
    
    	void setNumber(int);
    	void setName(string);
    	void setAddress(string);
    
    	int getNumber();
    	string getName();
    	string getAddress();
    
    private:
    	int number;
    	string name;
    	string address;
    };
    

    ---------------------------------------------------------------------------

    //Customer.h

    #pragma once
    #include "Order.h"
    using namespace std;
    
    class Customer
    {
    public:
    	Customer(int, string, string);
    	~Customer(void);
    	void print();
    
    	void setNumber(int);
    	void setName(string);
    	void setAddress(string);
    
    	int getNumber();
    	string getName();
    	string getAddress();
    
    private:
    	int number;
    	string name;
    	string address;
    };
    

    ---------------------------------------------------------------------------
    //Und das sind die Fehlermeldungen

    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\order.h(16): error C2061: Syntaxfehler: Bezeichner 'Product'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\order.h(25): error C2065: 'Product': nichtdeklarierter Bezeichner
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\order.h(25): error C2059: Syntaxfehler: '>'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\order.h(26): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.h(6): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.h(9): error C2143: Syntaxfehler: Es fehlt ',' vor ')'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.h(26): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.cpp(3): error C2653: 'Product': Keine Klasse oder Namespace
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.cpp(4): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.cpp(8): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.cpp(11): error C2653: 'Product': Keine Klasse oder Namespace
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.cpp(12): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.cpp(16): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.cpp(19): error C2653: 'Product': Keine Klasse oder Namespace
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.cpp(19): fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.
    1>  Order.cpp
    1>  Customer.cpp
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.h(9): error C2061: Syntaxfehler: Bezeichner 'string'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.h(14): error C2061: Syntaxfehler: Bezeichner 'string'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.h(18): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'getName'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.h(18): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.h(18): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.h(18): warning C4183: 'getName': Rückgabetyp fehlt; Memberfunktion, die 'int' zurückgibt wird angenommen
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.h(23): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'name'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.h(23): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\product.h(23): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\order.h(13): error C2061: Syntaxfehler: Bezeichner 'Customer'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\order.h(13): error C2535: 'Order::Order(void)': Memberfunktion bereits definiert oder deklariert
    1>          c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\order.h(12): Siehe Deklaration von 'Order::Order'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\order.h(24): error C2143: Syntaxfehler: Es fehlt ';' vor '*'
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\order.h(24): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\order.h(24): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>  Code wird generiert...
    1>c:\users\aytiekin\aytekin\documents\visual studio 2010\projects\übung\pg1klausurws2010_2011\order.cpp(31): error C4716: 'Order::computeOrderPrice': Muss einen Wert zurückgeben
    

    ich würde mich über jede hilfe freuen... Wenn ihr die cpp dateien auch sehen müsst, kann ich die natürlich auch posten.

    /edit pumuckl: cpp- und code-Tags


  • Mod

    Ein #inlcude ist eine reine Textersetzung. Wenn product.h order.h einbindet und order.h wieder die product.h, aber schon das #pragma once aus der product.h von vorher wirkt, dann wird product.h an der Stelle gar nicht eingesetzt und entsprechend ist Product nicht bekannt, wenn es bei der Definition von Order benutzt wird. Die Lösung ist natürlich nicht, das pragma once zu ersetzen, das würde alles nur noch schlimmer machen (du solltest es jedoch vielleicht durch portablere Include-Guards ersetzen, die das gleiche bewirken, aber auf jedem System funktionieren).

    Stattdessen musst du die zirkuläre Abhängigkeit auflösen. Das geht hier ganz einfach, denn die Definition von Order braucht gar nicht die Definition von Product. Eine Forward-Deklaration reicht für Pointer auf eine Klasse aus.

    Ebenso braucht Product überhaupt gar nichts von order.h, da nirgendwo ein Order auftaucht. Das Include war dort also sowieso völlig fehl am Platz. Ebenso beim Customer.

    An deinem Design ist übrigens so einiges sehr zweifelhaft:
    -double ist sicherlich einer der schlechtesten Datentypen für Geld. Verwechsele nicht Ähnlichkeit in der Schreibweise mit Ähnlichkeit in der Bedeutung. Du würdest ja auch keinen int für eine Telefonnummer nehmen (hoffe ich). Fließkommmazahlen sind so gut es geht ein Kontinuumsdatentyp in einem Digitalcomputer. Geld hingegen ist diskret. Das sind gegensätzliche Konzepte, das wird zu Fehlern führen.
    -Brauchst du wirklich Benutzerdefinierte Destruktoren in Klassen die keine eignen Ressourcen halten? Lass mich raten: Sie sind leer und du hast sie reingemacht, weil ein schlechter Lehrer/Buch es dir so vorgemacht haben.
    -Ich weis noch nicht, ob ich das Design von Order mag. Kommt drauf an, was genau damit passieren soll. Kann passen, kann daneben sein.



  • Ich hab die cpp- und Codetags mal nachgetragen. Neben dem was SeppJ geschrieben hat bitte auch mal die Links in seiner/meiner Signatur aufmerksam durchlesen.


Anmelden zum Antworten