我收到此错误:
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;
}
...
}
我的结构是否有问题,我尝试在库中使用?我可以用另一种方式构建它吗?
答案 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类型。