Ich versuche, eine alte Bibliothek (die Namespaces nicht verwendet, soweit ich sagen kann) zu modernen Compilern zu portieren. Eines meiner Ziele kann den Unterschied zwischen System :: TObject und :: TObject (ohne Namespace) nicht erkennen. System :: TObject ist systemeigen für den Compiler.Wie behandelt man einen Klassennamenkonflikt, wenn alter Code portiert wird?
Ich habe eine using-Direktive versucht, d.h. mit :: TObject;
Aber das tut es nicht.
Die offensichtliche Lösung besteht darin, die gesamte ursprüngliche Bibliothek in einen Namespace zu packen und sie dann namentlich aufzurufen - das sollte die Mehrdeutigkeit vermeiden. Aber ist das die klügste Lösung? Gibt es eine andere Lösung? Wenn Sie einen Namespace hinzufügen, müssen Sie einige Dateien ändern, und ich weiß nicht, ob dies später unerwünschte Auswirkungen haben würde.
Dies wird dazu führen, dass der Compiler Symbole mit dem Präfix oldlib erzeugt, die in der alten Bibliothek nicht vorhanden sind, was zu einem "unaufgelösten externen Symbol" public führt: __thiscall oldlib :: A :: ~ A (void) "(? ? 1A @ oldlib @@ QAE @ XZ) ' – xtofl