2

我收到此错误:

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

这是我的代码

物理层

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();
 };
}

物理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 回答