2011-12-06 50 views
0

我正在打電話某些成員時,編譯錯誤candidate function(s) not accessible,但我宣佈他們爲public。 我只能得到錯誤時從vtk一些類是參與(如返回類型或參數),當被稱爲類是不在同一VS-項目作爲調用代碼。我也嘗試過其他類型的VTK沒有運氣:(爲什麼「候選人功能(S)無法訪問」,但聲明的公共

下面是一些測試代碼:

// 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類型上?

親切的問候, richn

+0

我不確定它是函數,但內存訪問。嘗試在函數調用之外移動** vtkActor :: new()**。 – ChrisBD

+0

嗨ChrisBD!這似乎並沒有被它:(我感動的方法調用外的演員初始化,但它並沒有改變anyhting。 – richn

+0

的vtkActor類是明確的問題,你把它聲明公開?同時還要注意頭。文件,在另一組件聲明的類應該由一個組件引用,而不是頭文件被導入 –

回答

4

短期看,在C3767 documentation和社會各界的評論顯示:

另一個產生錯誤的情況下

似乎產生這個錯誤是使用另一件事本機類型 在公共方法的簽名中,然後嘗試從另一個程序集中調用該方法 。

此處的解決方案是在定義本機類型之後但在定義使用它的受管方法 之前在本機類型 上添加#pragma make_public。 #pragma的該文檔make_public意味着你應該 得到當非公有制本地類型由 暴露公共管理型編譯器警告,但(至少默認警告級別) 似乎並不爲案子。

你檢查的建議?

+0

謝謝Werner,這樣做!你是對的,我真的可以早點看過... – richn

相關問題