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.

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

  1. Martin

    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).

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert