実際にはベクトルのベクトルであり、両方のクラスがテンプレートである 2D 行列クラスを作成しようとしています。ベクトルクラスで添え字演算子をオーバーロードしました。この問題は、次のエラー メッセージで行列クラスの operator[] をオーバーロードしようとすると発生します: error C2440: 'return' : cannot convert from 'vector' to 'vector &'。私のクラスのコードは次のとおりです。
template <typename t>
class vector
{
private:
    t           *Mem;
    int         vectsize;
public:
    vector<t>   (int _vectsize = 0);
    //some other methods here
    t& operator[](int index)
    {
            return Mem[index];
    }
};
と
template <typename h>
class matrix
{
private:
    int dim;
    vector< vector<h> > *Mat;
public:
    matrix<h> (int _dim = 0);
    matrix<h> (const matrix & _copy);
    vector<h>& operator[](int index)
    {
        return Mat[index];  //Here's the error
    }
};
私はいくつかのグーグルを作成し、同じ例または [] の代わりに () をオーバーロードしているのを見つけました。コンパイラが戻り値Mat[index]を参照として認識できない理由を理解できません(これは参照である必要があると思います)。ただし、単一のベクトルを操作する場合、添え字演算子は問題なく機能します。私の間違いを指摘してください。前もって感謝します!
追加: 非動的ベクトルを使用すると現在の問題は解決するようですが、型の不一致の代わりに、2 つのリンカー エラー (未解決の外部シンボル) が発生しました。vector< vector<h> > Mat;コードにコメントを付けたりコメントを外したりすることで、行またはExtend関数が存在する場合にのみ問題が発生することがわかりました(クラスベクターの空のメソッドです)。ベクトルコンストラクターに何か関係があると思いますが、正確に何が悪いのかわかりません。
template <typename t> //vector constructor
vector<t>::vector(int _vectsize)
    {
        vectsize = _vectsize;
        Mem = new t[vectsize];
        for (int i=0; i<vectsize; i++)
            Mem[i] = 0;
    }
matrix.h 内 (まだ別のファイルにはありません):
matrix<h> (int _dim = 0) : Mat(_dim)
    {
        dim = _dim;
        for (int i=0; i<dim; i++)
            Mat[i].Extend(dim-i);
    }
可能であれば、何か提案を聞きたいです。