首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

编译通不过, 请帮忙看看

2012-03-04 
编译通不过, 请大虾帮忙看看#includeiostreamusingnamespacestdtemplate classTclasstest{public:tes

编译通不过, 请大虾帮忙看看
#include   <iostream>
using   namespace   std;

template <class   T>  
class   test
{
public:
test():size(0),ptr(0)   {}
test(int   n):size(n),ptr(new   T[n]){}

~test()
{
delete[]   ptr;
}

T&   operator[](unsigned   i)
{
return   ptr[i];
}

const   T&   operator[](unsigned   i)   const
{
return   ptr[i];
}

operator   T*()
{
return   ptr;
}

operator   const   T*()   const
{
return   ptr;
}

T*   operator   *()
{
return   ptr;
}

private:
int   size;
T*   ptr;
};

void   main()
{
        test <char>   obj(4);
obj[0]= 'a ';
obj[1]= 'b ';
obj[2]= 'c ';
obj[3]= '\0 ';

//char*   p   =   obj;
//std::cout < <p < <std::endl;
}

上面的程序只要我把
operator   T*()
{
return   ptr;
}
这一段注释掉就可以编译通过。为啥加上这个重载函数就不行呢?  
请大虾指点一下?

[解决办法]
obj[0]:

可以匹配operator T*(), 也可以匹配T& operator[](unsigned i),
编译器不知道选哪个, 所以报错!

热点排行