E
Also hier ein Auschnitt aus der Microsoft Visual C++ 6.0 Dokumentation
über den Fehler:
Compiler-Warnung (Stufe 1) C4786
'Bezeichner' : Bezeichner wurde auf 'Nummer' Zeichen in den Fehlerinformationen verkürzt
Die Bezeichner-Zeichenfolge überschritt die maximal erlaubte Länge und wurde verkürzt.
Der Debugger kann keine Fehler in Code beheben, der Symbole enthält, die länger als 255 Zeichen sind. Im Debugger können Sie die verkürzten Symbole nicht anzeigen, auswerten, aktualisieren oder überwachen.
Durch die Verkürzung von Bezeichnernamen können Sie diese Beschränkung umgehen. Der untenstehende Beispiel-Code demonstriert diese Methode.
Es kann auch ein Aufzeichnungsmechanismus zur Lösung dieses Problems verwendet werden. Ein Aufzeichnungsmechanismus funktioniert wie die printf-Anweisungen im Code. Er überwacht die Anwendung während der Fehlersuche. Die Makros _ASSERT, _ASSERTE, _RPTn und _RPTFn stellen kompakte und flexible Möglichkeiten dar, um den Ablauf zu steuern. Diese Makros sind nicht definiert, wenn _DEBUG nicht definiert ist. Weitere Informationen finden Sie unter Verwenden von Makros für Überprüfungen und Berichte.
Das folgende Beispiel demonstriert eine Situation, die diese Compiler-Warnung erzeugen würde, und die Lösung für dieses Problem:
//sample1.cpp
//In diesem Programm befindet sich eine Klasse mit einem
//sehr langem Namen. Es wird ein Objekt dieses Klassen-
//typs instantiiert. Es werden mehrere C4786-Warnungen
//angezeigt. Die folgenden Kommentare zeigen die Lösung
//für dieses Problem.
#define ein_sehr_langer_Klassenname ein_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr_sehr//_sehr_langer_Klassenname
//LÖSUNG: Löschen Sie die Kommentierung der folgenden
//Zeilen
//#ifdef _DEBUG
//#define ein_sehr_langer_Klassenname EIN_KURZER_KLASSENNAME
//#endif
class ein_sehr_langer_Klassenname
{
public:
ein_sehr_langer_Klassenname() {};
int m_data;
};
void main()
{
ein_sehr_langer_Klassenname test_obj;
test_obj.m_data = 12;
}
Das folgende Beispiel demonstriert, daß Vorlagen mit langen Klassennamen als Parameter sehr schnell die Zeichenbegrenzung von 255 Zeichen überschreiten können. Es werden auch Lösungen für dieses Problem dargestellt.
//sample2.cpp
//LÖSUNG1: Löschen Sie die Kommentierung der nächsten 4
//Zeilen
//#ifdef _DEBUG
//#define SehrLangerKlassennameA A
//#define SehrLangerKlassennameB B
//#endif
//LÖSUNG2: Eine alternative Lösung:
//Löschen Sie die Kommentierung der nächsten 3
//Zeilen.
//#ifdef _DEBUG
//#define EineWillkuerlicheKlasse SRC
//#endif
template <class A1, class A2, class A3, class A4>
class SehrLangerKlassennameA{};
template <class B1, class B2, class B3>
class SehrLangerKlassennameB{};
template <class C1, class C2>
class SehrLangerKlassennameC{};
template <class D1>
class SehrLangerKlassennameD{};
class EineWillkuerlicheKlasse{};
typedef SehrLangerKlassennameD<EineWillkuerlicheKlasse> KlasseD ;
typedef SehrLangerKlassennameC<EineWillkuerlicheKlasse, KlasseD> KlasseC;
typedef SehrLangerKlassennameB<EineWillkuerlicheKlasse, KlasseC, KlasseD> KlasseB;
typedef SehrLangerKlassennameA<EineWillkuerlicheKlasse, KlasseB, KlasseC, KlasseD> KlasseA;
void EineWillkuerlicheKlasse(KlasseA aobj){}
void main()
{
KlasseA AObj ;
EineWillkuerlicheKlasse(AObj) ;
}
also wie Marc++us schon richtig erklärt hat, ist es der Bezeichner der gekürzt wird nicht der stringinhalt der übergeben wird.
war ein fehler meinerseits im ersten posting.
gruß elwida