编译通不过, 请大虾帮忙看看
#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),
编译器不知道选哪个, 所以报错!