标题:[求助]用NULL返回空类型时,出现错误error C2440: “return”: 无法从“int ...
只看楼主
trailblazer
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-3-12
 问题点数:0 回复次数:8 
[求助]用NULL返回空类型时,出现错误error C2440: “return”: 无法从“int”转换为



这是一个数组类的程序,在重载操作符[ ]时,若参数i非法,返回空值,但出现错误error C2440: “return”: 无法从“int”转换为“int &”,应该怎么实现?请教高手指点,谢谢!

运行环境vs2005

#include "stdafx.h"
#include <iostream>
using namespace std;

const int DefaultSize = 100;

template <class Type>
class Array
{
Type *elements; //数组存放空间
int ArraySize; //当前长度
void getArray ( ); //建立数组空间
public:
Array( int Size=DefaultSize );
Array( const Array<Type>& x );
~Array( ) { delete [ ]elements;}
Type& operator [ ] ( int i ); //取元素值
};

template <class Type>
void Array<Type>::getArray ( )
{
//私有函数:创建数组存储空间
elements = new Type[ArraySize];
if ( elements == 0 )
{
ArraySize = 0;
cerr << "Memory Allocation Error" << endl;
return;
}
}

template <class Type>
Array<Type>::Array ( int sz )
{
//构造函数
if ( sz <= 0 )
{
ArraySize = 0;
cerr << "非法数组大小" << endl;
return;
}
ArraySize = sz;
getArray ( );
}

template <class Type>
Type & Array<Type>::operator [ ] ( int i )
{
//按数组名及下标 i,取数组元素的值
if ( i < 0 || i > ArraySize-1 )
{
cerr << "数组下标超界" << endl;
return NULL; //error C2440: “return”: 无法从“int”转换为“int &”
}
else
return elements[i];
}

int _tmain(int argc, _TCHAR* argv[])
{
Array<int> a(3);
a[0] = 1;
a[1] = 2;
a[2] = 3;
for (int j = 0; j < 3; j++)
{
cout<<a[j]<<endl;
}

return 0;
}

搜索更多相关主题的帖子: int error NULL return 类型 
2007-03-12 18:22
csight
Rank: 1
等 级:新手上路
威 望:1
帖 子:293
专家分:0
注 册:2006-6-11
得分:0 
return NULL; //error C2440: “return”: 无法从“int”转换为“int &”
上句可去;(但这样也会修改其他地方的数据;不好;)
或者lz可以直接在住函数中判断i的范围;
本人也等待有更好的解决办法......

头可断,发型不可乱;血可流,皮鞋不可不擦油;
2007-03-12 19:16
trailblazer
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-3-12
得分:0 

多谢2楼的
感觉函数Type & Array<Type>::operator [ ] ( int i )
的返回类型是参数化数据类型Type,所以不能直接返回NULL,不知道C++对这种模板类型的数据类型是否有更好的解决方法

2007-03-12 19:37
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 

用assert吧,用断言就可以警告程序员错误的位置了。


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-03-12 21:42
trailblazer
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-3-12
得分:0 
assert该怎么用,不太明白啊
2007-03-14 17:45
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 

template <class Type>
Type & Array<Type>::operator [ ] ( int i )
{
//按数组名及下标 i,取数组元素的值
if ( i < 0 || i > ArraySize-1 )
{
cerr << "数组下标超界" << endl;
return NULL; //error C2440: “return”: 无法从“int”转换为“int &”
}
else
return elements[i];
}
改为:

template <class Type>
Type & Array<Type>::operator [ ] ( int i )
{
assert(i>=0&&i<ArraySize);
return elements[i];
}


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-03-16 13:43
trailblazer
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-3-12
得分:0 
wfpb 版主,
我用assert怎么总出现如下错误,
error C3861: “ASSERT”: 找不到标识符
是vs2005的问题吗?
在网上找了好久也不知道如何修改啊
2007-03-17 10:12
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
#include &lt;cassert&gt;或者#include &lt;assert.h&gt;

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-03-17 12:18
trailblazer
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-3-12
得分:0 
回复:(wfpb)#include 或者#include...

多谢了,这么简单的问题

2007-03-21 22:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-123859-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.514958 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved