我在调用某些成员时遇到编译错误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();
};
我试图调用同一个项目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
在包含//错误的两行中,这是确切的消息:
error C3767: 'A::test1': candidate function(s) not accessible
我如何解决此错误?为什么它只出现在vtk-types上?
亲切的问候, richn答案 0 :(得分:5)
简要介绍C3767 documentation,社区评论显示:
另一个产生错误的方案
似乎产生此错误的另一件事是使用本机类型 在公共方法的签名中,然后尝试调用它 来自不同集会的方法。
这里的解决方案是在本机类型上添加#pragma make_public, 在定义本机类型之后但在定义托管方法之前 使用它。 #pragma make_public的文档暗示你应该这么做 在公开非公共本机类型时获取编译器警告 公共托管类型,但(至少具有默认警告级别) 似乎并非如此。
你检查过那个建议吗?