Probleme nach Update von Visual Studio C++ 2005
-
Hallo,
habe am Wochenende ein ziemlich umfangreiches (und nervendes) Update auf mein System gefahren und dabei auch eine neue Version des Visual Studio 2005 C++ erhalten.
Ich habe jetzt die Version: 8.0.50727.762 (SP.050727-7600)Danach erhalte ich für alle Projekte die Compiler-Meldungen:
1>stdafx.cpp
1>P:\Christoph\Microsoft Visual Studio 8\VC\include\string.h(135) : warning C4003: Nicht genügend übergebene Parameter für das Makro '__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX'
1>P:\Christoph\Microsoft Visual Studio 8\VC\include\string.h(135) : error C2065: '_String': nichtdeklarierter Bezeichner
1>P:\Christoph\Microsoft Visual Studio 8\VC\include\string.h(135) : error C2275: '_locale_t': Ungültige Verwendung dieses Typs als Ausdruck
1> P:\Christoph\Microsoft Visual Studio 8\VC\include\crtdefs.h(2045): Siehe Deklaration von '_locale_t'
1>P:\Christoph\Microsoft Visual Studio 8\VC\include\string.h(135) : error C2065: '_Locale': nichtdeklarierter Bezeichner
1>P:\Christoph\Microsoft Visual Studio 8\VC\include\string.h(135) : warning C4229: Anachronismus verwendet: Modifizierer der Daten werden ignoriert
1>P:\Christoph\Microsoft Visual Studio 8\VC\include\string.h(135) : error C2078: Zu viele Initialisierungen
1>P:\Christoph\Microsoft Visual Studio 8\VC\include\string.h(173) : warning C4003: Nicht genügend übergebene Parameter für das Makro '__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_1_EX'Da es sich um die mitgelieferte <string.h> handelt kann es wohl kein Code-Fehler von mir sein, zumal alle Projekte vor dem Update funktionierten. Ich vermute daher, dass es sich um irgendeine Compiler-Option handelt.
Ich arbeite erst seit kurzem mit Visual Studio 2005 und bin mittlerweiele ausgesprochen genervt, was die Umstellung von Projekten von Visual C++ nach Visual Studio 2005 angeht
.Wer erspart mir die Zeit zum Suchen und kann mir helfen?
Danke und Grüße
P.S.
Bin neu in diesem Forum und hoffe auf wohlwollende Beratung

-
Es handelt sich um einen Fehler von Dir!
Die STL verwendet schon lange nicht mehr Dateien mit der Endung .h. Verwende #include <string>
-
Vielen Dank für die wirklich superschnelle Antwort, sie hilft mir leider nicht wirklich weiter:
Zum einen: der Code stammt gar nicht von mir sondern wurde vom Anwendungs-Assistent von Visual Studio 2005 so generiert. Ich möchte - im speziellen Fall -nur eine Konsoleanwendung erzeugen unter Nutzung der MFC.
Wo der Verweis auf die <string.h> tatsächlich steht, ist aus dem generierten Code auch nicht ersichtlich, ich kann es daher auch gar nicht ändern.Zum andere:
Ich bin ein (oldfashioned?) MFC-Programmierer und möchte/muß meine alten MFC-Projekte weiterhin nutzen und pflegen, habe daher erstmal auch keine Zeit mich mit der STL auseinander zu setzen. Ich war froh, dass ich mit dem Umstieg von Visual C++ auf Visual Studio 2005 einergermaßen klar kam. Das ganze hat ja bis vor dem Update auch alles noch funktioniert, auch mit <String.h>.Was kann ich tun
?christoph.
-
Du liest nicht was ich geschrieben habe.
Verwende bitte nicht #include <string**.h**>
verwende bitte #include <string>
Das hat nichts mit oldfashonied zu tun, aber wnen Du schon die STL verwendest, und das machst du, dann solltest und musst Du es auch richtig machen.
-
Hallo, ich habe durchaus gelesen was du geschrieben hast, habe es (glaube ich) sogar verstanden, bin mir aber nicht sicher ob du gelesen hast was ich geschrieben habe:
Ich möchte die STL nicht verwenden. Wenn ich das - wie du schreibst (unbeabsichtigt) tue - den hilf' mir bitte das zu verhindern. Wo schalt' ich das ab?
Ausserdem kann ich die include Anweisung nicht ändern, da sie in dem automatisch generierten, Code nicht auftaucht. Die übrigens ebenfalls mitgenerierte stdafx.h strotz zwar vor Headerdateien mit der endung .h eine string.h ist nicht dabei.
-
Wo der Verweis auf die <string.h> tatsächlich steht, ist aus dem generierten Code auch nicht ersichtlich, ich kann es daher auch gar nicht ändern.
Du könntest in deinem Code suchen...
-
string.h wird in keinem von der MFC generierten Code verwendet!
-
Alle suchen "#include "string.h"", Unterordner, Suchergebnisse: 1, "Gesamte Projektmappe"
Übereinstimmende Zeilen: 0 Übereinstimmende Dateien: 0 Insgesamt durchsuchte Dateien: 7
-
such doch mal nur nach string.h..
-
Zeig mal Deine stdafx.h! Den in der passiert es ja.
Verwendest Du eine fremde Library?
-
Anbei die stdafx.h
Habe übrigens auf einem anderen System Visual Studio 2005 von den Original CDs neu installiert. Dort taucht das Problem nicht auf.// stdafx.h : Includedatei für Standardsystem-Includedateien // oder häufig verwendete projektspezifische Includedateien, // die nur in unregelmäßigen Abständen geändert werden. // #pragma once // Ändern Sie folgende Definitionen für Plattformen, die älter als die unten angegebenen sind. // In MSDN finden Sie die neuesten Informationen über die entsprechenden Werte für die unterschiedlichen Plattformen. #ifndef WINVER // Lassen Sie die Verwendung spezifischer Features von Windows XP oder später zu. #define WINVER 0x0501 // Ändern Sie dies in den geeigneten Wert für andere Versionen von Windows. #endif #ifndef _WIN32_WINNT // Lassen Sie die Verwendung spezifischer Features von Windows XP oder später zu. #define _WIN32_WINNT 0x0501 // Ändern Sie dies in den geeigneten Wert für andere Versionen von Windows. #endif #ifndef _WIN32_WINDOWS // Lassen Sie die Verwendung spezifischer Features von Windows 98 oder später zu. #define _WIN32_WINDOWS 0x0410 // Ändern Sie dies in den geeigneten Wert für Windows Me oder höher. #endif #ifndef _WIN32_IE // Lassen Sie die Verwendung spezifischer Features von IE 6.0 oder später zu. #define _WIN32_IE 0x0600 // Ändern Sie dies in den geeigneten Wert für andere Versionen von IE. #endif #include <stdio.h> #include <tchar.h> #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // Einige CString-Konstruktoren sind explizit. #ifndef VC_EXTRALEAN #define VC_EXTRALEAN // Selten verwendete Teile der Windows-Header nicht einbinden. #endif #include <afx.h> #include <afxwin.h> // MFC-Kern- und Standardkomponenten #include <afxext.h> // MFC-Erweiterungen #ifndef _AFX_NO_OLE_SUPPORT #include <afxdtctl.h> // MFC-Unterstützung für allgemeine Steuerelemente von Internet Explorer 4 #endif #ifndef _AFX_NO_AFXCMN_SUPPORT #include <afxcmn.h> // MFC-Unterstützung für allgemeine Windows-Steuerelemente #endif // _AFX_NO_AFXCMN_SUPPORT #include <iostream> // TODO: Hier auf zusätzliche Header, die das Programm erfordert, verweisen.
-
#include <iostream> inkludiert <string>.
Hier ist ein Problem.Allerdings wird <iostream> automatisch inkludiert, wenn ein Win32 Consolen Projekt mit MFC unterstützung angelegt wird... (getestet mit VS2005 SP1).
Nimms mal #include <iostream> raus..
Simon
-
In dieser Form dürfte iostream kein Problem sein. So verwende ich es hundertfach.
Das Problem ist, dass irgendwo string.h verwendet wir.Verwende mal die Compiler Option /showincludes dann siehst Du wer string.h zieht.
-
Sorry, dass es etwas gedauert hat...
Wo ist die <string.h>?
tja, alle Wege führen nicht nur nach Rom, sondern auch zu <string.h>.
Egal, welches #include statement ich wegnehme, irgendwo steckt immer die string.h.
Selbst <iostream> führt letztendlich dorthin.
Daran kanns also nicht liegen. Es kann ja doch auch nicht wahr sein, dass ich die von MS mitgelieferten, header-Dateien korrigiere um diesen Fehler zu beheben!Da ja alles erst nach meinem Update passierte, habe ich jetzt Visual Studio 2005 deinstalliert und von den CD's neu installiert...
und siehe da, funzt alles wieder! Der selbe Code, die selben includes...
Ich danke euch für eure Hilfe und eure Zeit.