有人可以解释为什么我在编译下面显示的代码时会遇到以下错误(以及如何修复它)
错误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 哪个州
我建议您在所有公共API中使用托管类型
)轻松调用System::String^
。这也确保您的库可以从其他CLR语言(如c#
这正是我所做的(BTW这是用于在更大的混合模式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;
}
答案 0 :(得分:3)
你正在使用C#-ish语法;正确的C ++ / CLI语法是:
public ref class ManagedClass abstract sealed
{
public:
static void SetString(String^ s) { str = s; }
static String^ GetString() { return str; }
private: // I assume you want this even though your code omitted it
static String^ str;
};
请注意,.NET代码使用属性而不是get / set成员函数对会更加惯用。