Определение шаблонных классов в C ++ - Шаблонный тип возвращаемого значения другого класса - PullRequest
0 голосов
/ 15 января 2019
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 голосов
/ 15 января 2019

Если вы напишите

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

 // ...
};

вы говорите, что Row является классом шаблона, определенным внутри Array2D.

То же самое, когда пишешь

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

// ...
};

Вы говорите, что Array2D - это шаблонный класс, определенный внутри Row.

Полагаю, вы намерены объявить Raw и Array2D независимыми классами, что-то вроде

template <class T>
class Row;

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

и

template <class T>
class Array2D;

template <class T>
class Row
{    
  // ...
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...