• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

[C++] gcc "different visibilility" warning

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Hallo,

gcc spuckt mir für C++ Code folgende Warnung aus:

ld: warning ABC_Info::ABC_Info(char*, char*)has different visibility (2) in [blah]/build/Debug/libxxx.a(xxx.o) and (1) in [blah]/build/bcrblib.build/Debug/yyylib.build/Objects-normal/i386/zzzl.o

ld: warning __ZN12ABC_InfoC2EPcS0_.eh has different visibility (2) in [blah]/build/Debug/libxxx.a(xxx.o) and (1) in [blah]/build/bcrblib.build/Debug/yyylib.build/Objects-normal/i386/zzzl.o

ld: warning __ZN12ABC_InfoC1EPcS0_.eh has different visibility (2) in [blah]/build/Debug/libxxx.a(xxx.o) and (1) in [blah]/build/bcrblib.build/Debug/yyylib.build/Objects-normal/i386/zzzl.o


Was wollen mir diese Worte sagen? Ich habe da noch kein "protected" etc gefunden, ich weiss gar nicht, wonach ich suchen soll.

C++ Profis, Tips?

Danke
 

patz

Châtaigne du Léman
Registriert
15.11.05
Beiträge
819
Code?

Sieht aus wie in Konflikt stehende Funktions/Klassendefinitionen.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Ja, so sieht es aus. Was ich Dir an Code anbieten kann ist folgendes:

Code:
struct ABC_Info {
	ABC_Info(		RC_CHAR *pNodeName = ".", 
									RC_CHAR *pCoreName = "Franz") 

	{
                  // ... Implementation
	}

};

Mit Google konnte ich über diese Fehlermeldung nichts finden.

Alex
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
Naja, der Codeschnipsel ist nicht wirklich aussagekräftig. Was fehlt ist die Definition in den jeweiligen Übersetzungseinheiten; ohne ist das mehr oder minder Rätselraten. Wirf mal einen Blick auf die jeweiligen Definitionen class vs. struct, unbenannte Namensräume ... könnten ein Problem sein.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Naja, der Codeschnipsel ist nicht wirklich aussagekräftig.
Tut mir auch leid, aber was besseres fiel mir nicht ein. Und das ganze Projekt kann ich unmöglich hier reinstellen.

Was fehlt ist die Definition in den jeweiligen Übersetzungseinheiten;
Für doofe: Wenn es nicht die Definition oben ist, was ist es dann? Das ist ein Ausschnitt aus einem Header File.

Wirf mal einen Blick auf die jeweiligen Definitionen class vs. struct, unbenannte Namensräume ... könnten ein Problem sein.
Wie gesagt, das ist so im Header ... und wird -- zumindest auch auf den zweiten Blick -- jeweils gleich gelesen.
Auch ein Blick in den Preprocessed Output bringt mich nicht weiter.

Aber was mich immer noch am meisten wundert: Ich finde diese Warnmeldung nirgends.
Ein Beispiel, was diese Warning auslöst würde mir vielleicht schon sehr helfen.

Alex
 

patz

Châtaigne du Léman
Registriert
15.11.05
Beiträge
819
Das ist ein Ausschnitt aus einem Header File.

Das ist doch auch Code für die Funktions-Implementation drin? Das hat in einem Header-File definitiv nichts zu suchen und kann schon die Ursache des Problems sein, da die Funktion so evtl. öfter definiert wird.

Der Code selbst gehört in .cpp- bzw. .c-Dateien, nicht in Header-Files.

Was machst du eigentlich mit structs, die Funktionen enthalten, in C++-Code? Dafür gibt es doch Klassen?
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
Tut mir auch leid, aber was besseres fiel mir nicht ein. Und das ganze Projekt kann ich unmöglich hier reinstellen.
Selbstredend ist das nicht sinnvoll. Brich das ganze runter bis Du mit einem Minimalbeispiel das Problem reproduzieren kannst. Meinst klärt sich dann das Problem von selbst.
Für doofe: Wenn es nicht die Definition oben ist, was ist es dann? Das ist ein Ausschnitt aus einem Header File.
Einmal definieren mehrmals deklarieren ist die goldene Regel. Solange es kein Template ist, darf man davon nicht abweichen.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Eigentlich wollte ich ganz viel schreiben, (Das z.B. dieser Code sehr, sehr alt und nicht von mir ist) aber ich habe gerade festgestellt, das es vielleicht möglicherweise doch ein gcc Problem ist.

Sagen wir mal, die Warnings tritt mit dem gcc, den Apple im Moment ausliefert nicht auf -- deshalb hat die Warning bisher auch keiner gesehen.

Trotzdem werde ich mal ein Miniprojekt machen, aber da frag ich doch mal ein paar gcc Profis, was sich geändert hat.

Danke für's Nachdenken

Alex