任何人都可以解释为什么我编译如下所示(以及如何解决它)奇怪C3767候选人功能(S)不能访问错误消息
错误C3767代码时,遇到下列错误:
'ManagedClass::SetString'
:候选函数(多个)不可访问E:\ TEMP \ ManagedCpp \ ManagedCpp \ ManagedCpp.cpp 24 ManagedCpp错误C3767:
'ManagedClass::GetString'
:候选(多个)功能不可访问E:\ TEMP \ ManagedCpp \ ManagedCpp \ ManagedCpp.cpp 26 ManagedCpp
我阅读下列类似的问题, C++ CLI error C3767: candidate function(s) not accessible 其中规定
我建议使用托管型
System::String^
而不是所有的公共API。这也保证了你的图书馆从其他CLR语言轻松调用,如C#
这正是我所做的(顺便说一句这是用来提取相同的编译错误在一个更大的混合模式DLL中的测试代码) 。
(该项目为VS2008 C++/CLI项目从菜单中即选择文件 - >新建项目 - > VISUAL C++ - > CLR控制台应用程序。)
感谢所有您的帮助。
using namespace System;
static public ref class ManagedClass
{
static public int SetString(String^ s)
{
str = s;
}
static public String^ GetString()
{
return str;
}
static String^ str ;
};
int main(array<System::String ^> ^args)
{
String^ test ="Here";
ManagedClass::SetString(test);
String^ j= ManagedClass::GetString();
return 0;
}
它有助于解决自上而下的错误消息。早期的消息(“静态”后面的'public',它不能去那里)通常会导致后面的消息(“我试图调用的函数是私有的”)。 – 2011-05-26 20:24:29