为什么"候选功能无法访问",尽管已公布

ric*_*chn 0 .net c++-cli vtk visual-c++

candidate function(s) not accessible在调用某些成员时遇到编译错误,尽管我将它们声明为public.当涉及来自vtk的某个类(作为返回类型或参数)并且要调用的类与调用代码不在同一个VS项目中时,我只得到错误.我也试过其他vtk类型没有运气:(

这是一些测试代码:

// 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();
};
Run Code Online (Sandbox Code Playgroud)

我试着从同一个项目中调用函数B是这样的:

// 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
Run Code Online (Sandbox Code Playgroud)

在带有//错误的两行中,这是确切的消息:

error C3767: 'A::test1': candidate function(s) not accessible
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?为什么它只出现在vtk类型上?

亲切的问候,富裕

Wer*_*nze 5

简要介绍一下C3767文档和社区评论显示:

另一个产生错误的场景

另一件似乎产生此错误的事情是在公共方法的签名中使用本机类型,然后尝试从不同的程序集调用该方法.

这里的解决方案是在定义本机类型之后但在定义使用它的托管方法之前,在本机类型上添加#pragma make_public.#pragma make_public的文档暗示当公共托管类型公开非公共本机类型时,您应该得到编译器警告,但(至少是默认警告级别)似乎不是这种情况.

你检查了那个建议吗?