09
Feb
07

Visual C++ 2005: Compiler error C3767 „Candidate Function Not Accessable“

Ich arbeite schon seit einer Weile an einem InterOp-Projekt, bei dem nativer C++-Code bzw. eine ganze Bibliothek von .NET (C#) aus verfügbar gemacht werden soll.


Ich ich ganze Klassenhierarchien und Baumstrukturen wrappen muss, bietet sich C++/CLI nahezu an, um einen Wrapper zu schreiben. Nachdem ich die ersten Klassen gewrappt hatte, bekam ich einen merkwürdigen Kompiler-Fehler C3767 „Candidate Function Not Accessable“ angezeigt. Zuerst konnte ich mir nicht recht helfen, doch dann (nachdem ich zahlreiche Newsgroups durchforstete) wurde es mir klar! Die Klassen im nativen C++-Code besitzen nicht den Zugriffsmodifier public und sind also by default private und somit für mich (bzw. den Compiler) nicht sichtbar. Wenn ich also „public“ vor den „class“ im Header-File schreibe, dann kommt der Fehler nicht mehr. Schön für mich, schlecht für meine Kollegen, denn der Code kompiliert jetzt nicht mehr bei denen.

Mein erster Workaround war ein Makro einzuführen, welches nur bei aktivierter /CLR-Kompilieroption das public einfügt. Das funktionierte soweit ganz gut, bis ich herausfand, dass es noch ein #pragma-statement namens #pragma make_public(Namespace::Klassenname) gab. Damit konnte ich die Präprozessor-Makros für meinen Workaround wegschmeißen 🙂 Aber es tut.

Advertisements

2 Responses to “Visual C++ 2005: Compiler error C3767 „Candidate Function Not Accessable“”


  1. 1 Martin
    29. September 2008 um 15:20

    hallo,
    das ist ja schoen und gut, aber was macht man, wenn der compiler n linker-fehler wirft, wenn man #pragma einfuegt?

    error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c00034d).

  2. 30. Oktober 2008 um 12:00

    Hallo Martin,
    sorry für die späte Antwort.

    Wenn Du weiterhin das Problem haben solltest, dann melde Dich bitte bei mir: ralf.abramowitsch@googlemail.com.

    Danke!

    Viele Grüße
    Ralf


Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s


Blog Stats

  • 194,056 hits

%d Bloggern gefällt das: