C++托管类,其成员函数中的参数是该类,报错

八戒入赘云栈洞 2018-12-04 09:08:48
C#调用C++托管类出现not supported by the language的错误。具体过程如下
我首先写了个标准C++类,如下:
//ca.h
#pragma once
class ca
{
public:
double value;
ca(double val);
~ca();
double getBias(ca a);
};
//ca.cpp
#include "stdafx.h"
#include "ca.h"
ca::ca(double val)
{
this->value = val;
}
ca::~ca()
{
}
double ca::getBias(ca a)
{
return this->value - a.value;
}

随后又写了个托管类camanage将ca封装起来,如下
//camanage.h
#pragma once
#include "ca.h"
using namespace System;
namespace manage
{
public ref class camanage
{
private:
ca * pimp;
public:
camanage(double a);
~camanage();
double getBias(camanage am);
};
}
//camanage.cpp
#include "stdafx.h"
#include "camanage.h"

namespace manage
{
camanage::camanage(double a)
{
pimp = new ca(a);
}


camanage::~camanage()
{
}
double camanage::getBias(camanage ca1)
{
return 0;
}
}

编译顺利通过。
然后用C#调用,代码如下:
camanage ca1 = new camanage(1);
camanage ca2 = new camanage(2);
double d = ca1.getBias(ca2);//error 'getBias' is not supported by the language

double d = ca1.getBias(ca2);这句代码会出现 'getBias' is not supported by the language的错误,大神们帮帮忙,看看这个该怎么解决!小弟多谢了先!
...全文
1179 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
ref class xxx;
  • 打赏
  • 举报
回复
引用 30 楼 早打大打打核战争 的回复:
写在内部使用它的那个类的前面即可,如果二者不在同一个namespace,要声明在namespace内部:namespace xxxnamespace {ref class xxx;}
完美实现,满意结贴,非常感谢大神! 哥们儿,这个帖子的分,就少个你分点儿,给两外两个兄弟也分点儿,还请体谅! 再次感谢!
  • 打赏
  • 举报
回复
写在内部使用它的那个类的前面即可,如果二者不在同一个namespace,要声明在namespace内部:namespace xxxnamespace {ref class xxx;}
  • 打赏
  • 举报
回复
引用 28 楼 早打大打打核战争 的回复:
ref class xxx;
我这样引的,总是出错,我回头再试试!这一句是写在namespace 外面还是里面?
  • 打赏
  • 举报
回复
引用 16 楼 八戒入赘云栈洞 的回复:
我的另一个帖子,和这个问题是一样的,本来打算把网址贴上去的,结果手快,点了回复,关键是,我连续回复了三层楼,系统不让我回复了,我只好等大家有回复了再贴网址!现在好了,大神又回答了一次!嘿嘿,感谢

正好大神,我还有另一个问题,就是如果同时又两个托管类,一个是camanage,另一个是cbmanage,怎么在camanage定义中使用cbmanage呢?也就是说cbmanage是camanage的成员函数的一个参数?这个该怎么处理呢?


大神不敢当,我对于.net也是二把刀~~~
.net中的对象是引用类型,与C++对象的值类型不一样,为了与C++对象模型的语义一致,这个引用就要显式写出来,不写^就是创建一个新对象,这一点和C#不同,camanage^ am语义上就等于c#的camanage am。
  • 打赏
  • 举报
回复
引用 19 楼 八戒入赘云栈洞 的回复:
[quote=引用 18 楼 zjq9931 的回复:] 看来我猜到了内心却没有猜到长相。。。。
帮忙看下我16楼的那个问题吧,又卡住了,[哭] 拜托[/quote] 还是引用吧。 包含头文件,名字空间打开。或者类型的时候记得名字空间。
  • 打赏
  • 举报
回复
请问C++ 托管类,如何做前置声明呢?我是不是太小白了!谢谢啦先
  • 打赏
  • 举报
回复
引用 18 楼 zjq9931 的回复:
看来我猜到了内心却没有猜到长相。。。。
帮忙看下我16楼的那个问题吧,又卡住了,[哭] 拜托
Saleayas 2018-12-06
  • 打赏
  • 举报
回复
引用托管类需要使用引用,类似C++ 的指针,使用 ^ . double getBias(camanage ^am);
  • 打赏
  • 举报
回复
引用 13 楼 早打大打打核战争 的回复:
double getBias(camanage am); 要写成 double getBias(camanage^ am); 这在楼主另一贴里写过了。 因为.net对象是引用类型,不像C++对象是值类型。之所以用^不用&是Anders Hejlsberg搞的鬼,Anders Hejlsberg去ms之前是Turbo Pascal和早期版本Delphi的设计者,^就是Pascal中的指针符号,他玩了一把情怀~~~
看来我猜到了内心却没有猜到长相。。。。
  • 打赏
  • 举报
回复
C#只能写托管类,而C++/CLI可以混合托管类和非托管类,这是比C#强大的功能
十八道胡同 2018-12-06
  • 打赏
  • 举报
回复
弄个托管类来调用,为啥不C#直接调用C++的呢?封装个托管类有啥特别的好处?
  • 打赏
  • 举报
回复
刚才忘了贴网址了,补上 https://bbs.csdn.net/topics/392487346
引用 13 楼 早打大打打核战争 的回复:
double getBias(camanage am); 要写成 double getBias(camanage^ am); 这在楼主另一贴里写过了。 因为.net对象是引用类型,不像C++对象是值类型。之所以用^不用&是Anders Hejlsberg搞的鬼,Anders Hejlsberg去ms之前是Turbo Pascal和早期版本Delphi的设计者,^就是Pascal中的指针符号,他玩了一把情怀~~~
我的另一个帖子,和这个问题是一样的,本来打算把网址贴上去的,结果手快,点了回复,关键是,我连续回复了三层楼,系统不让我回复了,我只好等大家有回复了再贴网址!现在好了,大神又回答了一次!嘿嘿,感谢 正好大神,我还有另一个问题,就是如果同时又两个托管类,一个是camanage,另一个是cbmanage,怎么在camanage定义中使用cbmanage呢?也就是说cbmanage是camanage的成员函数的一个参数?这个该怎么处理呢?
weixin_43978962 2018-12-05
  • 打赏
  • 举报
回复
看不懂呀,,,,,因为.net对象是引用类型,不像C++对象是值类型。之所以用^不用&是Anders Hejlsberg搞的鬼,Anders Hejlsberg去ms之前是Turbo Pascal和早期版本Delphi的设计者,^就是Pascal中的指针符号,他玩了一把情怀~~~
  • 打赏
  • 举报
回复
自顶,期待大神驾到
鲁维娟 2018-12-05
  • 打赏
  • 举报
回复
可以私自请教一下吗
  • 打赏
  • 举报
回复
double getBias(camanage am);
要写成
double getBias(camanage^ am);
这在楼主另一贴里写过了。
因为.net对象是引用类型,不像C++对象是值类型。之所以用^不用&是Anders Hejlsberg搞的鬼,Anders Hejlsberg去ms之前是Turbo Pascal和早期版本Delphi的设计者,^就是Pascal中的指针符号,他玩了一把情怀~~~
  • 打赏
  • 举报
回复
引用 9 楼 qq_43940926 的回复:
我可以和您沟通一下吗
可以啊
qq_43940926 2018-12-05
  • 打赏
  • 举报
回复
引用 3 楼 八戒入赘云栈洞的回复:
[quote=引用 1 楼 zjq9931 的回复:] 这一句: double getBias(camanage am); 改成: double getBias(camanage &am); 试试?
这样修改之后,编译不通过的! 错误如下: Error 1 error C3699: '&' : cannot use this indirection on type 'manage::camanage' [/quote] 就技术问题我可以和您沟通一下吗
加载更多回复(9)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧