2011-12-06 15 views
0

特定のメンバーを呼び出すときにコンパイルエラーcandidate function(s) not accessibleが発生しましたが、私はpublicと宣言しました。 vtkの何らかのクラスが(戻り値の型または引数として)関与しているときと、呼び出すクラスが呼び出し元のコードと同じVSプロジェクトにないときだけエラーが発生します。また、私は運で他のVTKの種類を試してみました:(ここなぜ公表されていますが、「候補関数にアクセスできません」

は、いくつかのテストコードです:

// 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 

// 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から関数を呼び出そうとしました。このようです

//エラーの2つの行では、これは正確なメッセージです。

error C3767: 'A::test1': candidate function(s) not accessible 

どうすればいいですか?このエラーを解決しますか?なぜそれはvtkタイプでのみ起こるのですか?

種類について、 richn

+0

私はそれが機能だとは分かりませんが、メモリアクセスです。 ** vtkActor :: new()**を関数呼び出しの外で移動してみてください。 – ChrisBD

+0

こんにちはChrisBD!それはそうではありません:(私はメソッド呼び出しの外でアクターの初期化を移動しましたが、何も変更されませんでした。 – richn

+0

vtkActorクラスは明らかに問題です、あなたはpublicと宣言しましたか?他のアセンブリで宣言されたクラスは、ヘッダーファイルの代わりにアセンブリ参照でインポートする必要があります –

答えて

4

C3767 documentationに短い外観やコミュニティがショーのコメント:

別のエラーを発生するシナリオ

このエラーが発生すると思われるもう一つは、使用していますネイティブタイプ をパブリックメソッドのシグネチャに挿入し、別のアセンブリからそのメソッド を呼び出しようとしました。

ここでの解決策は、ネイティブタイプを定義した後、それを使用する管理対象メソッド を定義する前に、ネイティブタイプの#pragma make_publicを に追加することです。 #pragma make_publicのドキュメントでは、公開されていないネイティブタイプがpublicで管理されているタイプの で公開されている場合にコンパイラの警告メッセージが表示されると思われますが、 は少なくともケース。

あなたはその提案を確認しましたか?

+0

ヴェルナーさん、ありがとうございました!あなたは正しいです。 – richn

関連する問題