Я пытаюсь использовать абстрактный базовый класс шаблонов. Компилятор дает ошибки в RowArray.cpp, что члены rowPntr и rowSize «не объявлены в этой области». Оба являются защищенными членами от абстрактного класса AbsRow. Я предполагаю, что этот проект невозможен, поскольку он использует виртуальные функции, которые динамически связаны во время выполнения, но в то же время использует шаблон, который привязан во время компиляции. Возможно, смешение этих двух вопросов? Что я хотел бы знать, так это, если мой проект возможен, и почему я получаю эти ошибки компилятора? Я также забыл упомянуть, что при создании объекта RowArray RowArray<int> obj(5);
я получаю ошибку связи 2019 в визуальной студии и в создателе Qt, это говорит мне неопределенное уважение к конструктору и деструктору RowArray.C++ Abstract Template Class
Абстрактный класс AbsRow.h
template <typename T>
class AbsRow
{
public:
virtual int getSize()const = 0;
virtual T getValue(int index)const = 0;
protected:
T *rowPntr;
int rowSize;
};
производный класс RowArray.h
#include "absrow.h"
template <class T>
class RowArray : public AbsRow<T>
{
public:
RowArray(const int rows);
virtual ~RowArray();
virtual T getValue(int index) const override;
virtual int getSize() const override;
void setValue(int row, int value);
};
RowArray.cpp
#include "rowarray.h"
#include <cstdlib>
template <class T>
RowArray<T>::RowArray(const int rows)
{
rowSize = rows;
rowPntr = new int[rows];
for(int index = 0; index < rows; index++)
{
rowPntr[index] = (rand() % 90) + 10;
}
}
template <class T>
RowArray<T>::~RowArray()
{
delete [] rowPntr;
}
template <class T>
void RowArray<T>::setValue(int row, int value)
{
rowPntr[row] = value;
}
template <class T>
int RowArray<T>::getSize() const
{
return rowSize;
}
template <class T>
T RowArray<T>::getValue(int index) const
{
return rowPntr[index];
}
Главная
#include "rowarray.h"
int main()
{
RowArray<int> row(7);
}
ли 'this-> rowPntr' и' this-> rowSize' помочь? –
Я думал об этом, но не потрудился попробовать, потому что я убедился, что это не проблема. Я стыжусь своей головой. –
Возможный дубликат [Произвольный доступ к шаблону шаблона для данных-членов базового класса] (http://stackoverflow.com/questions/1120833/derived-template-class-access-to-base-class-member-data) –