首页 > 解决方案 > C++ 模板类定义 - 不同类的模板化返回类型

问题描述

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)
{

}

标签: c++arraysclasstemplates

解决方案


如果你写

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

 // ...
};

你说的是里面Row定义的一个模板类。 Array2D

写的时候一样

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

// ...
};

你说的Array2D是里面定义的模板类Row

我想您打算将Rawand声明Array2D为独立的类,例如

template <class T>
class Row;

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

template <class T>
class Array2D;

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

推荐阅读