Fehler: 'int' sollte auf ';' folgen



  • Hey Leute,
    habe folgenden Code:

    Item_Base.h

    #ifndef ITEM_BASE_H
    #define ITEM_BASE_H
    
    #include <string>
    
    class Item_base
    {
    	public:
    		Item_base( const std::string&, double );
    		virtual ~Item_base() { }
    		Item_base& operator=( const Item_base& );
    		Item_base( const Item_base& );
    		std::string book() const { return isbn; }
    		virtual double net_price( std::size_t cnt ) const { return cnt * price; }
    		virtual Item_base* clone() const;
    
    	private:
    		std::string isbn;
    
    	protected:
    		double price;
    };
    
    #endif
    

    Sales_item.cpp

    #include "Sales_item.h"
    
    using namespace std;
    
    Sales_item::Sales_item():
    	p( 0 ), use( new std::size_t( 1 ) )
    	{
    	}
    
    Sales_item::Sales_item( const Item_base& orig ):
    	p( orig.clone() ), use( new std::size_t( 1 ) )
    	{
    	}
    
    Sales_item::Sales_item( const Sales_item& orig ):
    	p( orig.p ), use( orig.use )
    	{
    		++*use;
    	}
    
    Sales_item::~Sales_item()
    {
    	decr_use();
    }
    
    Sales_item& Sales_item::operator=( const Sales_item& rhs )
    {
    	++*rhs.use;
    	decr_use();
    	p = rhs.p;
    	use = rhs.use;
    	return *this;
    }
    
    const Item_base* Sales_item::operator->() const
    {
    	if( p )
    		return p;
    	else
    		throw std::logic_error( "unbound Sales_item" );
    }
    
    const Item_base& Sales_item::operator*() const
    {
    	if( p )
    		return *p;
    	else
    		throw std::logic_error( "unbound Sales_item" );
    }
    
    void Sales_item::decr_use()
    {
    	if( --*use == 0 )
    	{
    		delete p;
    		delete use;
    	}
    }
    

    Ich erhalte folgende Fehler die ich leider ganz und gar nicht verstehe 😕 :

    e:\sources\übungsprogramme\von büchern und tutorials\uebunghandleklasse\uebunghandleklasse\item_base.h(10): error C2144: Syntaxfehler: 'int' sollte auf ';' folgen
    1>e:\sources\übungsprogramme\von büchern und tutorials\uebunghandleklasse\uebunghandleklasse\item_base.h(10): error C2144: Syntaxfehler: 'int' sollte auf ';' folgen
    1>e:\sources\übungsprogramme\von büchern und tutorials\uebunghandleklasse\uebunghandleklasse\sales_item.cpp(11): error C2039: 'clone': Ist kein Element von 'Item_base'
    1>          e:\sources\übungsprogramme\von büchern und tutorials\uebunghandleklasse\uebunghandleklasse\item_base.h(8): Siehe Deklaration von 'Item_base'
    1>e:\sources\übungsprogramme\von büchern und tutorials\uebunghandleklasse\uebunghandleklasse\sales_item.cpp(12): fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.
    1>e:\sources\übungsprogramme\von büchern und tutorials\uebunghandleklasse\uebunghandleklasse\item_base.h(10): error C2144: Syntaxfehler: 'int' sollte auf ';' folgen
    

    Hoff ihr könnt mir vielleicht helfen.

    Vielen Dank schonmal

    Lg freeG



  • Die beiden Codestücke passen nicht wirklich zueinander.
    Zeig doch mal ein komplettes Beispiel. Den Fehler kann ich so nicht nachvollziehen. Scheint irgendeine fehlende Typangabe zu sein.



  • okidoki, hier der ganze Code.

    Item_Base.h

    #ifndef ITEM_BASE_H
    #define ITEM_BASE_H
    
    #include <string>
    
    class Item_base
    {
    	public:
    		Item_base( const std::string& book = " ", double sales_price = 0.0 );
    		virtual ~Item_base() { }
    		Item_base& operator=( const Item_base& );
    		Item_base( const Item_base& );
    		std::string book() const { return isbn; }
    		virtual double net_price( std::size_t cnt ) const { return cnt * price; }
    		virtual Item_base* clone() const;
    
    	private:
    		std::string isbn;
    
    	protected:
    		double price;
    };
    
    #endif
    

    Item_Base.cpp

    #include "Item_Base.h"
    
    using namespace std;
    
    Item_base::Item_base( const string& book, double sales_price ):
    	isbn( book ), price( sales_price )
    	{
    	}
    
    Item_base::Item_base( const Item_base& orig ):
    	isbn( orig.isbn ), price( orig.price )
    	{
    	}
    
    Item_base& Item_base::operator=( const Item_base& rhs )
    {
    	if( this != &rhs )
    	{
    		isbn = rhs.isbn;
    		price = rhs.price;
    		return *this;
    	}
    	else
    		return *this;
    }
    
    Item_base* Item_base::clone() const
    {
    	return new Item_base( *this );
    }
    

    Bulk_item.h

    #ifndef BULK_ITEM_H
    #define BULK_ITEM_H
    
    #include "Item_Base.h"
    
    class Bulk_item : public Item_base
    {
    	public:
    		Bulk_item( const std::string& book = " " , double sales_price = 0.0, std::size_t quantity = 0, double disc = 0.0 );
    		virtual ~Bulk_item() { }
    		Bulk_item( const Bulk_item& );
    		Bulk_item& operator=( const Bulk_item& );
    		double net_price( std::size_t cnt ) const;
    		Bulk_item* clone() const;
    
    	private:
    		std::size_t min_qty;
    		double discount;
    };
    
    #endif
    

    Bulk_item.cpp

    #include "Bulk_item.h"
    
    using namespace std;
    
    Bulk_item::Bulk_item( const std::string& book, double sales_price, std::size_t quantity, double disc ):
    	Item_base( book, sales_price ), min_qty( quantity ), discount( disc )
    	{
    	}
    
    Bulk_item::Bulk_item( const Bulk_item& orig ):
    	Item_base( orig ), min_qty( orig.min_qty ), discount( orig.discount )
    	{
    	}
    
    Bulk_item& Bulk_item::operator=( const Bulk_item& rhs )
    {
    	if( this != &rhs )
    	{
    		Item_base::operator=( rhs );
    		min_qty = rhs.min_qty;
    		discount = rhs.discount;
    		return *this;
    	}
    	else
    		return *this;
    }
    
    double Bulk_item::net_price( size_t cnt ) const
    {
    	if( cnt >=min_qty )
    		return cnt * ( 1 - discount) * price;
    	else
    		return cnt* price;
    }
    
    Bulk_item* Bulk_item::clone() const
    {
    	return new Bulk_item( *this );
    }
    

    Sales_item.h

    #ifndef SALES_ITEM_H
    #define SALES_ITEM_H
    
    #include "Item_Base.h"
    
    class Sales_item
    {
    	public:
    		Sales_item();
    		Sales_item( const Item_base& );
    		Sales_item( const Sales_item& );
    		~Sales_item();
    		Sales_item& operator=( const Sales_item& );
    		const Item_base* operator->() const;
    		const Item_base& operator*() const;
    
    	private:
    		Item_base* p;
    		std::size_t* use;
    		void decr_use();
    };
    
    #endif
    

    Sales_item.cpp

    #include "Sales_item.h"
    
    using namespace std;
    
    Sales_item::Sales_item():
    	p( 0 ), use( new std::size_t( 1 ) )
    	{
    	}
    
    Sales_item::Sales_item( const Item_base& orig ):
    	p( orig.clone() ), use( new std::size_t( 1 ) )
    	{
    	}
    
    Sales_item::Sales_item( const Sales_item& orig ):
    	p( orig.p ), use( orig.use )
    	{
    		++*use;
    	}
    
    Sales_item::~Sales_item()
    {
    	decr_use();
    }
    
    Sales_item& Sales_item::operator=( const Sales_item& rhs )
    {
    	++*rhs.use;
    	decr_use();
    	p = rhs.p;
    	use = rhs.use;
    	return *this;
    }
    
    const Item_base* Sales_item::operator->() const
    {
    	if( p )
    		return p;
    	else
    		throw std::logic_error( "unbound Sales_item" );
    }
    
    const Item_base& Sales_item::operator*() const
    {
    	if( p )
    		return *p;
    	else
    		throw std::logic_error( "unbound Sales_item" );
    }
    
    void Sales_item::decr_use()
    {
    	if( --*use == 0 )
    	{
    		delete p;
    		delete use;
    	}
    }
    

    main.cpp

    #include "Item_Base.h"
    #include "Bulk_item.h"
    #include "Sales_item.h"
    
    int main()
    {
    Item_base a;
    Bulk_item b;
    }
    

    So, hier das ganze Beispiel und hier nochmal der Fehler, vielleicht könnt ihr mir jetzt helfen.

    Was auch komisch ist, dass er sagt es gibt clone nicht bei Item_base.

    Fehler:

    [e]lambda[/e]>e:\sources\übungsprogramme\von büchern und tutorials\uebunghandleklasse\uebunghandleklasse\item_base.h(10): error C2144: Syntaxfehler: 'int' sollte auf ';' folgen
    1>c1xx : fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.
    e:\sources\übungsprogramme\von büchern und tutorials\uebunghandleklasse\uebunghandleklasse\item_base.h(10): error C2144: Syntaxfehler: 'int' sollte auf ';' folgen
    1>e:\sources\übungsprogramme\von büchern und tutorials\uebunghandleklasse\uebunghandleklasse\sales_item.cpp(11): error C2039: 'clone': Ist kein Element von 'Item_base'
    1>          e:\sources\übungsprogramme\von büchern und tutorials\uebunghandleklasse\uebunghandleklasse\item_base.h(8): Siehe Deklaration von 'Item_base'
    1>e:\sources\übungsprogramme\von büchern und tutorials\uebunghandleklasse\uebunghandleklasse\sales_item.cpp(12): fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.
    e:\sources\übungsprogramme\von büchern und tutorials\uebunghandleklasse\uebunghandleklasse\item_base.h(10): error C2144: Syntaxfehler: 'int' sollte auf ';' folgen
    

    Vielen Dank schonmal

    Gruß freeG



  • Ich habe mal alles in ein File gepackt und es kompiliert bei mir ohne Probleme. Kompilierst du auch sicher das richtige Projekt? Stimmen die Namen der Files?

    Wenn nicht, dann reduzier das Beispiel mal so weit es geht von unwichtigen Sachen. Aber so, dass der Fehler noch bleibt.



  • Mhh war wohl irgendein Fehler in meinem Projekt selber, hab jetzt das ganze nochmal in ein neues Projekt gemacht und es geht.

    Also vielen Dank trotzdem

    Gruß freeG


Anmelden zum Antworten