C ++模板化类定义-不同类的模板化返回类型

时间:2019-01-15 02:40:47

标签: c++ arrays class templates

template <class T>
Row<T> Array2D<T>::operator[](int index) const
{

}

此代码无法正常工作,并显示错误消息“声明与“ Array2D :: Row Array2D :: operator [](int index)const不兼容”(在第19行声明。)。我正在使用2个模板化类,并且我认为这是主要问题,但不确定如何解决。感谢您的帮助,如果需要更多详细信息,请告诉我。

类声明:

#pragma once
#include "Array.h"
#include "Row.h"

template <class T>

class Array2D
{
template <class T> class Row;

public:
    Array2D();
    Array2D(int row, int col);
    Array2D(const Array2D & copy);

    ~Array2D();

    Array2D & operator =(const Array2D & rhs);
    Row<T> operator[](int index) const;

    int getRow() const;
    void setRow(int rows);
    int getColumns() const;
    void setColumns(int columns);

    T & Select(int row, int column);

private:
    Array<T> m_array;
    int m_row;
    int m_col;
};

行级:

#pragma once

#include "Array2D.h"

template <class T>

class Row
{
template <class T> class Array2D;

public:
    Row(Array2D<T> & array, int row);
    T & operator[](int column);

private:
    Array2D<T> & m_array2D;
    int m_row;

};

template <class T>
Row<T>::Row(Array2D<T> & array, int row)
{

}

template <class T>
T & Row<T>::operator[](int column)
{

}

1 个答案:

答案 0 :(得分:3)

如果你写

template <class T>
class Array2D
{
template <class T> class Row;

 // ...
};

您说Row是在内部 Array2D中定义的模板类。

写时也一样

template <class T>
class Row
{
template <class T> class Array2D;

// ...
};

您说Array2DRow内部定义的模板类。

我想您打算将RawArray2D声明为独立的类,所以将其声明为

template <class T>
class Row;

template <class T>
class Array2D
{
  // ...
};

template <class T>
class Array2D;

template <class T>
class Row
{    
  // ...
};