stlコンテナクラスベクトルを派生し、[]演算子をオーバーロードして要素にアクセスする際の範囲チェックを下付き文字で実行しようとしています。 しかし、派生クラスVec
のconstオブジェクトを作成しようとすると、コンパイルエラーが発生します。以下例えばstd :: vectorから派生したクラスのconstオブジェクトを作成できません
コードである:
template<class T>
class Vec : public vector<T>
{
public:
Vec(): vector<T>()
{
}
Vec(int i):vector<T>(i)
{
}
T& operator[](int i)
{
return at(i);
}
const T& operator[](int i) const
{
if(i>=size())
cout<<"error"<<endl;
return at(i);
}
};
void main()
{
Vec<int> v1(10); //works fine
const Vec<int> v(10); //error
}
理由コード CONSTベクトルv(10)。動作しますが、 const Vec v1(10);動作しません。 私には何かがありますか? Constオブジェクトを作成できないのはなぜですか?
*あなたの*本当の*コードを投稿してください。この投稿に記載されている場合は、あなたの説明しているエラーは、他の多くのエラーによって矮小です。 – WhozCraig
残念ながらg ++ 4.5で問題を再現することはできません。( 'void main'、missingが含まれていて、' this-> 'で依存しない名前を修飾しないでください)。あなたは私たちを助けるためにどんな詳細な説明もしていただけますか? –
@マークBもそうです。 – WhozCraig