当前位置:编程学习 > C#/ASP.NET >>

为什么这个简单的泛型函数总是出错?

#include "stdafx.h"

using namespace System;

generic<typename T> where T:IComparable
T MaxE(array<T>^ x);
int main(array<System::String ^> ^args)
{
array<double>^ h[]={0.0,4.3,6.5,5.6,7.8,2.1,9.5};
array<int>^ k[]={0,2,6,3,9,5,8,7};
         double hData=MaxE(h);
int kData=MaxE(k);
Console::WriteLine(hData);
Console::WriteLine(kData);
    return 0;
}
generic<typename T> where T:IComparable
T MaxE( array<T>^ x )
{
T val(x[0]);
for (int i=0;i<x->Length;i++)
{
if (val->CompareTo(x[i])<0)
{
val=x[i];
}
}
return val;
} --------------------编程问答-------------------- 还没写过泛型函数 不太了解 --------------------编程问答-------------------- 没这么写过,不懂,TMP ? --------------------编程问答-------------------- 你这个是C++/CLI的泛型啊。。。 --------------------编程问答--------------------
引用 3 楼 healer_kx 的回复:
你这个是C++/CLI的泛型啊。。。

是啊!iso/ansi的函数模板没有问题,重新写成c++/cli的泛型函数,就完蛋了! --------------------编程问答-------------------- 怎么个完蛋啦?不明白。 --------------------编程问答-------------------- 错误在这里:
error C2728: “cli::array<Type> ^”: 本机数组不能包含此托管类型
分明是泛型函数是完全失败的,不管什么类型都白扯! --------------------编程问答-------------------- 能不能贴出完整代码,还是不清楚。 --------------------编程问答--------------------
引用 7 楼 ptrunner 的回复:
能不能贴出完整代码,还是不清楚。

大哥!你不是在跟我开玩笑吧!
你觉得我贴出的代码还不全?
再贴就得把别的程序里的代码给贴出去了! --------------------编程问答-------------------- C++/CLI的generic,和C#的泛型是一回事情,!但是和C++的template不一样的。
你可以看看C#的泛型,其实很简单的,没有C++模板那么强大的功能了。
两回事情。 --------------------编程问答--------------------
引用 6 楼 haitao5676 的回复:
错误在这里:
error C2728: “cli::array<Type> ^”: 本机数组不能包含此托管类型
分明是泛型函数是完全失败的,不管什么类型都白扯!

是不支持array<IComparable>? --------------------编程问答--------------------
引用 9 楼 healer_kx 的回复:
C++/CLI的generic,和C#的泛型是一回事情,!但是和C++的template不一样的。
你可以看看C#的泛型,其实很简单的,没有C++模板那么强大的功能了。
两回事情。

不好意思,你说的我看不懂!c#有没有泛型我不关心!他有多强大的功能我更不关心!
我这个是书上的例程,generric和template是c++在两种规范中为了实现函数重载的两种表现形式!两回事情从何谈起?
我觉得你应该是个c#高手,可我很早就已经不用c#了,我不太喜欢拿东西! --------------------编程问答--------------------
引用 10 楼 hai040 的回复:
引用 6 楼 haitao5676 的回复:
错误在这里:
error C2728: “cli::array<Type> ^”: 本机数组不能包含此托管类型
分明是泛型函数是完全失败的,不管什么类型都白扯!

是不支持array<IComparable>?

那怎样才能让他支持呢?
因为我在写到T:后就没有代码提示了,IComparable是我硬写上去的!同时这个函数也是我硬写上去的:
val->CompareTo(x[i]),这个也没有代码提示! --------------------编程问答-------------------- 不懂,这里会托管c的估计不多 --------------------编程问答-------------------- 从编译错误来讲,非托管Array包含了托管的Type,楼主是否应该先查一下Type,把它改成也是非托管的。

楼主可以参考一下:
http://stackoverflow.com/questions/3600695/array-of-pin-ptrtype --------------------编程问答-------------------- 托管C++问题,楼主请自己移贴C#版吧。这边基本没人讨论这东西。 --------------------编程问答--------------------
引用 15 楼 taodm 的回复:
托管C++问题,楼主请自己移贴C#版吧。这边基本没人讨论这东西。

明明是好东西,为什么没人讨论? --------------------编程问答-------------------- 因为这里是纯C++版,不是C#版。
为了节约你自己的时间,自己早移贴吧。 --------------------编程问答--------------------
引用 17 楼 taodm 的回复:
因为这里是纯C++版,不是C#版。
为了节约你自己的时间,自己早移贴吧。

怎么搞的?
这东西怎么就归到了c#这种东西了!
vc的东西不属于c++,我就没办法了,可是c++的东西非要和c#相提并论,我很别扭
不是c#不行,c#这种东西倒是什么都可以干,但是十分麻烦,实在不是可以相信的语言! --------------------编程问答-------------------- 我能考虑学c++/cli这种东西已经很给c#面子了,4年前我就已经把c#和vb归到一类了!
vb语言就已经是过去小学生可以理解的语言了! --------------------编程问答-------------------- 没人承认托管C++是C++。
你说这东西属于VC到还3分成立,那你也得移贴去VC版。
没人在这讨论托管C++,这就是现在的事实。再想不通你也只有移贴。 --------------------编程问答-------------------- 这个还是简单的。。。。。。  --------------------编程问答-------------------- 哦,难怪楼主说我是C#高手,还是可能,呵呵,难怪没人搭理你了,哥哥我以前研究过一段时间CLI,但是我也懒得说了。 --------------------编程问答--------------------
引用 18 楼 haitao5676 的回复:
引用 17 楼 taodm 的回复:

因为这里是纯C++版,不是C#版。
为了节约你自己的时间,自己早移贴吧。

怎么搞的?
这东西怎么就归到了c#这种东西了!
vc的东西不属于c++,我就没办法了,可是c++的东西非要和c#相提并论,我很别扭
不是c#不行,c#这种东西倒是什么都可以干,但是十分麻烦,实在不是可以相信的语言!

C++/CLI被ECMA通过标准化,和这里的讨论C++(ISO C++的各种部分实现)根本就是两种不同的语言。所以你发错区了。
--------------------编程问答-------------------- array<double>^ h[]={0.0,4.3,6.5,5.6,7.8,2.1,9.5};有这么写托管数组的?

array<double>^ h={0.0,4.3,6.5,5.6,7.8,2.1,9.5};
补充:.NET技术 ,  VC.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,