Domanda

Sto ricevendo un errore di compilazione candidate function(s) not accessible Quando chiamavo determinati membri, anche se li ho dichiarati come public. Ricevo l'errore solo quando una classe da vtk è coinvolto (come tipo di ritorno o come argomento) e quando la classe da chiamare non è nello stesso VS-project del codice chiamante. Ho anche provato altri tipi VTK senza fortuna :(

Ecco un codice di prova:

// A.h, in a seperate class library
#include <vtkActor.h>
public ref class A
{
public:
    A(void);

    void test1(vtkActor* actor);
    vtkActor* test2();
    void test3(char* actor);
    char* test4();
};


// B.h, Same as A but in the same project as the calling code 
#include <vtkActor.h>
ref class B
{
public:
    B(void);

    void test1(vtkActor* actor);
    vtkActor* test2();
    void test3(char* actor);
    char* test4();
};

Ho provato a chiamare le funzioni dallo stesso progetto B è in questo modo:

// calls to class library
A^ testA = gcnew A();    
testA ->test1(vtkActor::New());  // error
testA ->test2();                 // error
testA ->test3("");               // ok
testA ->test4();                 // ok

// calls to this project
B^ testB = gcnew B();
testB ->test1(vtkActor::New());  // ok
testB ->test2();                 // ok
testB ->test3("");               // ok
testB ->test4();                 // ok

Nelle due righe con // errore questo è il messaggio esatto:

error C3767: 'A::test1': candidate function(s) not accessible

Come posso risolvere questo errore? Perché si verifica solo sui tipi VTK?

Cordiali saluti, Richn

È stato utile?

Soluzione

Un breve sguardo Documentazione C3767 E i commenti della comunità mostrano:

Un altro scenario di generazione di errori

Un'altra cosa che sembra generare questo errore è l'utilizzo di un tipo nativo nella firma di un metodo pubblico e quindi provare a chiamare quel metodo da un altro assembly.

La soluzione qui è quella di aggiungere un #pragma make_public sul tipo nativo, dopo aver definito il tipo nativo ma prima di definire il metodo gestito che lo utilizza. I documenti per #pragma make_public implicano che si suppone che si prenda un avvertimento del compilatore quando un tipo nativo non pubblico è esposto da un tipo gestito pubblico, ma (almeno con i livelli di avvertimento predefiniti) che non sembra essere il caso.

Hai controllato quel suggerimento?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top