Это проект приложения Windows Forms, использующий Visual Studio 2010. Как говорится:
У меня неуправляемая реализация «Вектор», что-то вроде:
template<class T>
class Vector {
public:
T* data;
unsigned len;
(...constructors and operators overloading like =, [], == and !=)
};
Он отлично работает,Я сделал несколько тестов, прежде чем с ним.После этого я реализовал также неуправляемую «Матрицу», которая использует ранее класс Vector.Что-то вроде:
template<class T>
class Matrix : public Vector<Vector<T>*> {
public:
Matrix(unsigned height = 20, unsigned width = 20)
: Vector(height)
{
for (unsigned i = 0; i < height; i++) {
data[i] = new Vector<T>(width);
}
}
Vector<T> operator[](unsigned pos) {
return data[pos];
}
};
Он также отлично работает, но с неуправляемыми данными в качестве T. Моя основная задача, получить доступ к данным с помощью [] [], работала, как и ожидалось.
Но теперь я хочу использовать этот класс Matrix внутри управляемого кода, причем данные T также являются управляемым кодом, в данном случае уже реализована ячейка:
public ref class Cell {
public:
bool dead;
public:
Cell() {
this->dead = false;
}
Cell(bool dead) {
this->dead = dead;
}
virtual String^ ToString() override {
return (this->dead ? "0" : "1");
}
};
Я делаюинициализация следующим образом:
Matrix<gcroot<Cell^>>* cells = new Matrix<gcroot<Cell^>>(height, width);
for (unsigned i = 0; i < height; i++) {
for (unsigned j = 0; j < width; j++) {
gcroot<Cell^> * cell = new gcroot<Cell^>;
cells[i][j] = cell; // ERROR!!
}
}
Строка, в которой я назначаю ячейку матрице, всегда возвращает ошибку в заголовке.Другие операторы (кроме '=') также дают мне ту же ошибку.
Я перепробовал все, но не могу найти способ это исправить.Я действительно избегаю трогать классы Vector и Matrix, потому что они должны быть неуправляемыми, и я должен использовать gcroot для внедрения в них управляемых данных.
В конце концов Cell станет Системой:: Windows :: Forms :: Кнопка, поэтому реализация должна быть такой.
Есть идеи?Извините, если я не смог объяснить себя.Если вам нужно больше кода из класса Vector, пожалуйста, сообщите.Большое спасибо:)