私はC++の機能で自分のconstの性質によって過負荷にすることができることを知っているが、私は、コードのこの部分を実行すると、私はエラーを得た:C++の関数のオーバーロード
#include <iostream>
#include <conio.h>
using namespace std;
template<class T> class Array
{
public:
Array() : data(0), sz(0){}
Array(unsigned size) : sz(size), data(new T[size]){}
~Array()
{
delete[] data;
}
const T& operator[](unsigned n) const
{
if(n >= sz || data == 0)
{
throw "Array subscript out of range";
}
return data[n];
}
T& operator[](unsigned n)
{
if(n >= sz || data == 0)
{
throw "Array subscript out of range";
}
return data[n];
}
operator const T*() const
{
return data;
}
operator T*()
{
return data;
}
private:
T* data;
unsigned sz;
Array(const Array& a);
Array& operator=(const Array&);
};
int main()
{
Array<int> IntArray(20);
for(int i = 0; i != 20; ++i)
{
IntArray[i] = i;
}
return 0;
}
エラーがIntArray[i] = i;
から来て、コンパイラがそれと言います適切な過負荷機能を見つけることができません。 T& operator[](unsigned n)
を呼び出すべきではありませんか?
私は私のコンパイラとして任意の助け
感謝をVS2010を使用しています。
http://stackoverflow.com/questions/を参照してください3519282/why-is-ambiguity-here – fizzbuzz