读书人

编译通不过, 请帮忙看看

发布时间: 2012-03-04 11:13:33 作者: rapoo

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

读书人网 >C++

热点推荐