[C++ Fehler] Unit1.cpp(785): E2015 Mehrdeutigkeit zwischen 'TGridRect' und 'Grids::TGridRect'



  • Hallo, habe zum ersten Mal eine fremde Komponente in mein Projekt eingefügt. Es handelt sich um ein in seiner Funktionalität verbessertes TStringGrid. Darf ich die beiden Komponenten nicht gleichzeitig verwenden?

    TGridRect NoSel;
    NoSel.Top = NoSel.Left = NoSel.Right = NoSel.Bottom;
    StringGrid2->Selection = NoSel;
    

    Die erste Zeile ist die angegebene Zeile 785 in der der Fehler auftritt. Die Hilfe spricht was von nicht zulässiger Mehrdeutigkeit in überladenen Funktionen. Wo kann ich ansetzen?



  • Es ist durchaus möglich Komponenten mit gleichem Namen zu verwenden, aber:
    1. Der Name muss immer eindeutig bleiben also: yyy::TGrid oder xxx:TGrid.
    2. Es ist nicht vorteilhaft, der Code wird unleserlich weil man immer überlegen muss welche Komponente denn nun gemeint ist.



  • Danke. Nun ist TGridRect sowohl in Grid.hpp als auch in MyGrids.hpp. Wenn ich beide Komponenten nutzen möchte, muss ich ja beide includieren. Nur dann kommt es eben zu dieser Mehrdeutigkeit, soll ich nun diese oder welche aufrufen. Verständlich das es einen Fehler gibt. Wie umgeht man diese Problematik?



  • Indem man den Namespace direkt mit angibt. Im Falle des normalen StringGrids eben

    Grids::TGridRect NoSel;
    NoSel.Top = NoSel.Left = NoSel.Right = NoSel.Bottom = -1; //Hier fehlt bei dir noch was
    StringGrid2->Selection = NoSel;
    

    Bei deinem neuen Grid mußt du halt mal sehen welchen namespace er hat. Wenn keiner vorhanden ist versuche halt

    ::TGridRect NoSel;
    


  • Danke schön, wieder etwas gelernt 🙂


Anmelden zum Antworten