错误C3767:候选函数无法访问Visual Studio 2010

时间:2012-09-17 22:13:26

标签: struct c++-cli

我收到此错误:

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;
  }
    ...
}

我的结构是否有问题,我尝试在库中使用?我可以用另一种方式构建它吗?

2 个答案:

答案 0 :(得分:1)

您正在混合使用C ++语法和C ++ / CLI语法。 “struct”是本机定义(C ++)。

要声明'struct',最好使用“value struct”构造。

“无法访问”错误也可能是因为'position'被隐式声明为'private'。

在此处查看有关托管类型声明的更多信息:http://www.codeproject.com/Articles/17741/C-CLI-in-Action-Declaring-CLR-types

答案 1 :(得分:0)

如果您尝试跨程序集边界传递类型pos的值,则它应该是公共托管类型。 public value struct pos最适合你正在做的事情。

默认情况下,本地类型在程序集边界中不可见,并且使它们可见的#pragma更像是一个kludge而不是真正的解决方案。只需使用元数据制作正确的.NET类型。