typeinfo geht nicht?



  • Also, ich habe ein Problem und absolut keine Ahnung:
    Vor kurzem hab ich nen neuen Computer bekommen und natürlich auch msvc 7.1 wieder installiert. Nun habe ich ein kleines Projekt angefangen. Die einzige Datei die ich zur Zeit inkludiere ist iostream. Wenn ich nun aber kompiliere, kommt:

    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\loki\TypeManip.h(139) : warning C4099: 'Loki::Conversion<void,void>': Geben Sie den zuerst unter Verwendung von 'struct' und jetzt unter Verwendung von 'class' gesehenen Namen ein
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\loki\TypeInfo.h(37) : error C2039: 'type_info': Ist kein Element von 'std'
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\loki\TypeInfo.h(40) : error C2039: 'type_info': Ist kein Element von 'std'
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\loki\TypeInfo.h(46) : error C2039: 'type_info': Ist kein Element von 'std'
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\loki\TypeInfo.h(58) : error C2039: 'type_info': Ist kein Element von 'std'
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\loki\TypeInfo.h(65) : error C2027: Verwendung des undefinierten Typs "type_info"
            predefined C++ types (compiler internal)(96): Siehe Deklaration von 'type_info'
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\loki\TypeInfo.h(65) : error C2227: Der linke Teil von '->before' muss auf Klasse/Struktur/Union zeigen
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\loki\TypeInfo.h(68) : error C2039: 'type_info': Ist kein Element von 'std'
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\loki\TypeInfo.h(77) : error C2027: Verwendung des undefinierten Typs "type_info"
            predefined C++ types (compiler internal)(96): Siehe Deklaration von 'type_info'
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\loki\TypeInfo.h(77) : error C2227: Der linke Teil von '->name' muss auf Klasse/Struktur/Union zeigen
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\loki\TypeInfo.h(83) : error C2678: Binärer Operator '==': Es konnte kein Operator gefunden werden, der einen linksseitigen Operator vom Typ 'const type_info' akzeptiert (oder keine geeignete Konvertierung möglich)
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\typeinfo(36) : error C2039: 'bad_cast': Ist kein Element von 'operator``global namespace'''
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\typeinfo(36) : error C2873: 'bad_cast': Das Symbol kann nicht in einer using-Deklaration verwendet werden
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\typeinfo(37) : error C2039: 'bad_typeid': Ist kein Element von 'operator``global namespace'''
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\typeinfo(37) : error C2873: 'bad_typeid': Das Symbol kann nicht in einer using-Deklaration verwendet werden
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\typeinfo(38) : error C2039: '__non_rtti_object': Ist kein Element von 'operator``global namespace'''
    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\typeinfo(38) : error C2873: '__non_rtti_object': Das Symbol kann nicht in einer using-Deklaration verwendet werden
    

    Mir ist aber schleierhaft wieso. Die fehler scheinen sich alle auf typeinfo zu beziehen, die Datei sieht so aus:

    /***
    *typeinfo.h - Defines the type_info structure and exceptions used for RTTI
    *
    *	Copyright (c) Microsoft Corporation. All rights reserved.
    *	Modified January 1996 by P.J. Plauger
    *
    *Purpose:
    *       Defines the type_info structure and exceptions used for
    *       Runtime Type Identification.
    *
    *       [Public]
    *
    ****/
    
    #if _MSC_VER > 1000
    #pragma once
    #endif
    
    #ifndef _TYPEINFO_
    #define _TYPEINFO_
    #include <xstddef>
    
     #ifndef __cplusplus
      #error This header requires a C++ compiler ...
     #endif
    
     #if !defined(_WIN32)
      #error ERROR: Only Win32 target supported!
     #endif
    
    #include <typeinfo.h>
    
     _STD_BEGIN
     #if _HAS_EXCEPTIONS
    using ::type_info;
    using ::bad_cast;
    using ::bad_typeid;
    using ::__non_rtti_object;
     #else
    		// CLASS bad_cast
    class _CRTIMP2 bad_cast
    	: public exception
    	{	// base of all bad cast exceptions
    public:
    	bad_cast(const char *_Message = "bad cast") _THROW0()
    		: exception(_Message)
    		{	// construct from message string
    		}
    
    	virtual ~bad_cast() _THROW0()
    		{	// destroy the object
    		}
    
    protected:
    	virtual void _Doraise() const
    		{	// perform class-specific exception handling
    		_RAISE(*this);
    		}
    	};
    
    		// CLASS bad_typeid
    class _CRTIMP2 bad_typeid
    	: public exception
    	{	// base of all bad typeid exceptions
    public:
    	bad_typeid(const char *_Message = "bad typeid") _THROW0()
    		: exception(_Message)
    		{	// construct from message string
    		}
    
    	virtual ~bad_typeid() _THROW0()
    		{	// destroy the object
    		}
    
    protected:
    	virtual void _Doraise() const
    		{	// perform class-specific exception handling
    		_RAISE(*this);
    		}
    	};
    
    class _CRTIMP2 __non_rtti_object
    	: public bad_typeid
    	{	// report a non RTTI object
    public:
        __non_rtti_object(const char *_Message)
    		: bad_typeid(_Message)
    		{	// construct from message string
    		}
    	};
     #endif /* _HAS_EXCEPTIONS */
    
     _STD_END
    
    #endif // _TYPEINFO_
    
    /*
     * Copyright (c) Microsoft Corporation. All rights reserved.
     * Modified January 1996 by P.J. Plauger
     * Modified November 1998 by P.J. Plauger
     * Consult your license regarding permissions and restrictions.
     */
    

    Kann mir bitte jemand helfen?



  • Mir fällt grad was merkwürdiges auf: Meine alten Projekte lassen sich immernoch einwandfrei kompilieren! Und jetzt kommt der Hammer: Ich habe ein altes Projekt kopiert, alles gelöscht und meinen neuen code reingeschrieben-> FEHLERFREI KOMPILIERT. Jetzt bin ich aber erst recht ratlos... Scheinbar ist jetzt irgend ne option an die das verursacht. Hat jemand eine Idee welche?



  • Falscher alarm. Der einzige Grund warums ging ist die Tatsache, das noch alte vorkompilierte header vorlagen 😞



  • Projekteigenschaften -> C/C++ -> Sprache -> Laufzeit-Typeninformationen aktivieren: Ja



  • Jetzt ists zu spät, hab schon mit der Neuinstallation begonnen. Trotzdem danke, ich merks mir. Was mir aber unlogisch erscheint ist die Tatsache, das nicht einmal das Startprojekt (also das was bereits da ist wenn man ein neues Projekt erstellt hat) kompiliert.



  • Was ist daran unlogisch? Diese Eigenschaft ist einfach standardmäßig bei jedem Projekt deaktiviert.



  • Und daher funktioniert standardmäßig kein Projekt? Aus irgend einem Grund hat der in jedes Projekt Loki::TypeInfo inkludiert... Und daher impliziet auch typeinfo... ach, egal, hauptsache es geht nach der neuinstallation...



  • Ich weiss nicht, wieso er standardmäßig Loki::TypeInfo inkludiert, aber das ist wohl kein Fehler des VS, sondern eher ein Fehler von dir bzw der Loki-Lib.



  • Nun, jetzt kenn ich den Fehler. Es ist ein Fehler des VS! Oder, eher ein Fehler von Windows. Mir ist nämlich grade eingefallen, dass bei Dateinamen FOO==foo==FoO==fOO... gilt dummerweise stand der include-Pfad für loki höher als die std-includes und loki definiert die Datei TypeInfo.h...


Anmelden zum Antworten