( unerwartet...



  • Hi,

    es wirkt jetzt dumm, es ist auch dumm, aber hier ist ein Code, der nicht funktioniert, ich habe die Stelle mit dem Fehler markiert, auch welchen.
    Ich habe schon viel rumgefragt, oft wurde einfach nach mehr Code gefragt, der liegt im Zweifelsfalle ja bei.

    // // BError.hpp
    
    #ifndef BERROR_
    #define BERROR_
    
    #include <string>
    
    namespace Exception
    {
    	using namespace std;
    
    	// Basisklasse aller Fehler
    	class BError
    	{
    	private:
    		// Der genaue Fehlerstring
    		string       error_;
    		string       file_;
    		unsigned int line_;
    
    	public:
    		BError(const string& error, const string& file, unsigned int line) : file_(file), line_(line)
    		{
    			// Formatierung des Strings
    			error_  = "Fehler in " + file_ + " in Zeile ";
    			error_ += line_;
    			error_ += ": " + error + "\r\n";		
    		}
    
    		const string& getError()    const {return error_;}
    
    		unsigned int  getLine()     const {return line_;}
    
    		const string& getFilename() const {return file_;}
    	};
    }
    
    #define EXCEPTION(EClass) throw Exception::EClass(__FILE__, __LINE__)
    
    #endif
    
    // // MainError.hpp
    
    #ifndef MAINERROR_
    #define MAINERROR_
    
    #include "BError.hpp"
    
    namespace Exception
    {
    	using namespace std;
    
    	// Fehlerklasse für alle Fehler aus Namespace Main
    	class MainError : public BError
    	{
    	public:
    		MainError(const string& error, const string& file, unsigned int line) : BError(error, file, line) {}
    	};
    }
    
    #endif
    
    // // ArgumentError.hpp
    
    #ifndef ARGUMENTERROR_
    #define ARGUMENTERROR_
    
    #include "MainError.hpp"
    
    namespace Exception
    {
    	using namespace std;
    
    	// Klasse für Fehler bei Dateiargumenten
    	class ArgumentError : public MainError
    	{
    	public:
    
    // ACHTUNG, HIER KOMM(T/EN) GLEICH D(ER/IE) FEHLER!
    
    		ArgumentError(const string& file, unsigned int line) : MainError("Ungueltige Argumentzahl.\r\nAufruf: INetPluginX Server Port\r\n", file, line) {}
    // h:\gemeinsames\projekte\inetpluginx\argumenterror.hpp(14) : error C2629: 'class Exception::ArgumentError (' unerwartet
    // h:\gemeinsames\projekte\inetpluginx\argumenterror.hpp(14) : error C2334: Unerwartete(s) Token vor ':'; sichtbarer Funktionsrumpf wird übersprungen
    
    // MEINE HERRSCHAFTEN, HIER IST/SIND D(ER/IE) FEHLER BEREITS VORÜBER!
    
    	};
    }
    
    #endif
    
    // // Application.hpp
    
    #ifndef APPLICATION_
    #define APPLICATION_
    
    namespace Main
    {
    	// Hauptklasse
    	class Application
    	{
    	private:
    	public:
    		// Main
    		void Main(int argv, char* argc[]);
    	};
    }
    
    #endif
    
    // // Application.cpp
    
    #include "Application.hpp"
    #include "ArgumentError.hpp"
    
    namespace Main
    {
    	void Application::Main(int argv, char* argc[])
    	{
    		if(argv != 3)
    			EXCEPTION(ArgumentError);
    	}
    }
    
    // // main.cpp
    
    #include <iostream>
    #include "Application.hpp"
    #include "BError.hpp"
    
    using namespace std;
    using namespace Main;
    using namespace Exception;
    
    int main(int argv, char* argc[])
    {
    	Application app;
    	try
    	{
    		app.Main(argv, argc);
    	}
    	catch(BError& error)
    	{
    		cerr << error.getError();
    		return 1;
    	}
    	catch(...)
    	{
    		cerr << "Undefinierter Fehler." << endl;
    		return 2;
    	}
    
    	return 0;
    }
    

    Nochmal 'tschuldigung, ist ja wirklich nichts empfehlenswertes, aber wer mal Zeit hat, kann es ja mal durchschauen, mir jedenfalls gehen nach diversen Stunden die Ideen aus. ⚠

    Danke im Voraus für die Mühe,

    MfG Eisflamme

    PS: Und bitte (noch) KEINE Kommentare zu dem schlechten Coding-Stil.



  • Sag mal, warum minimierst du nicht deinen Code auf das *nötigste*?

    Dann findet man den Fehler auch meistens selbst.



  • Wie oben schon geschrieben, das Nötigste ist leicht einzusehen, wenn man innerhalb der Fehlermeldung einfach mal rumschaut, aber leider hat sich nach langer Sucher ergeben, dass das Problem wahrscheinlich nicht in dieser Datei liegt.
    Daher gab ich auch die anderen Codeteile mit, die Dateien sind im Code aber gut unterteilt, hoffe ich, daher sollte es möglich sein das zu durchschauen.

    Ich selbst konnte den Fehler leider nicht finden.



  • Bitte lad das Projekt mal auf deine Homepage. Ich finde den Fehler in 2 Minuten.



  • hab mal den code probeweise compiliert,dh alle includes rausgenommen und alles als eine datei compiliert.

    kein fehler beim bcb, aber beim ausführen des codes gibts einen error in dieser zeile

    void Application::Main(int argv, char* argc[]) 
        {
            if(argv != 3)
                EXCEPTION(ArgumentError);//hier
        }
    


  • otze:

    Hmmmmmmm, das kann sein... aber was ist daran falsch?

    Nichts, ersetze ich das durch:

    throw ArgumentError(__FILE__, __LINE__);
    

    so gibt es das gleiche Problem, die gleichen Fehler.

    MfG Eisflamme



  • OK, ShadeOfMine, nman und weitere Spezialeinheiten haben festgestellt, dass es sich um ein VC6.0-spezifisches Problem handelt. Nun lade ich in Hoffnung auf Gelingen SP6 runter, wünscht mir Glück. 🙂



  • void Application::Main(int argv, char* argc[]) 
        { 
            if(argv != 3) 
                EXCEPTION(ArgumentError);//hier 
        }
    

    egal ob exception oder throw,ich krieg da pointer fehler
    //Edit doch net, hab mir die message nur net richtig durchgelesen^^



  • VC6 übersetzte es bei mit, nachdem ich std:: ergänzt hatte:
    ArgumentError(const std::string& file, unsigned int line)



  • Genau, das war auch bei mir die Lösung. 😃

    PS: SP6 änderte nichts an dem Fehler.


Anmelden zum Antworten