Linker Warnung: Wie krieg ich die weg ?



  • Guten Abend zusammen,

    ich habe etliche Linker Warnungen:
    z.B. Public Symbol '_extGif' defined in both module C:\...\Unit1.OBJ and C:\...\File.OBJ

    Wie krieg ich die weg ? Ich kann die .OBJ nicht öffnen.

    Danke schon mal.



  • Suchfunktion benutzen (zB. mit 'defined in both')!



  • Das ist net schlimm.

    Heißt nur das du die eine Variable in 2 oder mehr Forms benutzt.
    Solang du sie nicht irgendwie 2 Forms gleichzeitig aufhast und diese Variable benutzt hat daskeine Auswirkung, meiner Erfahrung nach.



  • Original erstellt von Thargor:
    **
    Heißt nur das du die eine Variable in 2 oder mehr Forms benutzt.
    **

    nein, es ist eine Variable zweimal global deklariert und zwar in Modulen, die aufeinander zugreifen können. Das ist was anderes und durchaus nicht zu verachten.



  • Also, wenn ich mit "Suchen->In allen Dateien" in allen Dateien des Projektes nach "extGif" suche, bekomme ich folgende Resultate:

    Unit1:
    if (strcmp(last_4_chars, extGif)==0); // und
    extGif=extCheck(extGif, ".gif"); // (extGif wechselt zwischen 2 Werten und hier wird der Wechsel gecheckt.

    file:
    char *extGif = ".gif"; // Das ist die Deklaration und
    if(AnsiSameText(ext, extGif)......

    Mehr ist nicht.

    Ich weiss aber noch, wie ich das gemacht habe:
    Ich habe "char *extGif=".gif"" in Unit1.cpp als globale Variable deklariert.
    Daraufhin kam von file.cpp die Mecker, dass die Variable nicht deklariert ist. Daraufhin habe ich sie aus Unit1.cpp ausgeschnitten und in file.cpp eingefügt.
    Seitdem wird die Variable bei beiden erkannt (ich weiss zwar nicht, warum auf einmal) und seitdem habe ich die Linker-Warnungen.



  • AndreasW schrieb:

    nein, es ist eine Variable zweimal global deklariert und zwar in Modulen, die aufeinander zugreifen können. Das ist was anderes und durchaus nicht zu verachten.

    Mh. Stimmt. MEine Fehlermeldung betraf net die .obj Dastein und sah etwas anderst aus.



  • Markus Pelloth schrieb:

    char *extGif = ".gif"; // Das ist die Deklaration

    Das Problem ist, das die Variable in einer anderen Datei auch global deklariert wurde. extGif gibs also zweimal. Deshalb die warnung, welche ja auch berechtigt ist.

    Um derartige Konflikte zu umgehen gibt es Namensbereiche:

    [cpp]
    namespace MyFile
    {
    char *extGif = ".gif"; // extern wäre besser
    } [/cpp]
    und der Zugriff:

    char* test=MyFile::extGif;
    

Anmelden zum Antworten