任何人都可以解釋爲什麼我編譯如下所示(以及如何解決它)奇怪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