2

このエラーが発生します:

error C3767: 'phys1::point::get_prev': candidate function(s) not accessible

これが私のコードです

phys.h

using namespace System;

namespace phys1 {

  typedef struct position{
    int x;
    int y;
  } pos;

 public ref class point{
   public:
     point(float speed, float gr);
   public:  
     pos get_prev();
   public: 
     pos get_next();
 };
}

phys.cpp

// This is the main DLL file.
#include "phys.h"

using namespace System;

namespace phys1 {
     ...
  static pos point::get_prev(){
    pos point;
    point.x=x;
    point.y=y;
    return point;
  }
    ...
}

ライブラリで使用しようとしている構造体に問題がありますか?別の方法で構築できますか?

4

2 に答える 2

2

C++ 構文と C++/CLI 構文が混在しています。「構造体」はネイティブ定義 (C++ のもの) です。

「構造体」を宣言するには、「値構造体」構造を使用することをお勧めします。

「アクセスできません」というエラーは、「位置」が暗黙的に「プライベート」として宣言されていることが原因である可能性もあります。

マネージ型宣言の詳細については、http: //www.codeproject.com/Articles/17741/C-CLI-in-Action-Declaring-CLR-typesを参照してください。

于 2012-09-17T22:19:54.030 に答える
1

posアセンブリの境界を越えて 型の値を渡そうとする場合は、パブリック マネージド型である必要があります。public value struct posあなたがしていることに最も適しています。

既定では、ネイティブ型はアセンブリの境界を越えて表示されません。ネイティブ型を表示できる#pragmaようにすることは、実際の解決策というよりも面倒です。メタデータを使用して適切な .NET タイプを作成するだけです。

于 2012-09-17T22:18:45.200 に答える