Извините, если я все еще спрашиваю об этом, но решение, которое мне дано, работает, если я делаю небольшой пример, если я попытаюсь реализовать его в своем проекте, я продолжаю получать ошибку в названии.
Это моя структура
нет соответствующего конструктора для инициализации 'point'
template<typename T>
struct element{
int i;
int j;
T val;
element(){}
element(T &other): val(other){} // this is the solution i previously got
template<typename U>
element(const element<U>& e): val(static_cast<T>(e.val)), i(e.i), j(e.j){}
// this one is used to help the main class cast types.
};
В моем классе я разреженная матрица создать динамический массив типа элемента,
element<T> *m; // the class is also template
Все прекрасно работает с основными типами данных.
Что мне нужно сделать, так это сделать мой динамический массив, составленный из elements
, работать с пользовательскими типами данных.
тест я делал это с точки STRUCT
struct point {
int x;
int y;
point(int xx, int yy) : x(xx), y(yy) {}
};
Конструктор I реализован в классе
explicit sparseMatrix(const T& d) : mat(0), capacity(0), n(0), def_value(d) {
m = new element<T> [capacity];
}
Когда в основном я сделать
sparseMatrix<point> mcp(point(1, 2));
I получить ошибку no matching constructor for initialization of 'point'
Что я делаю неправильно?
Как я могу решить эту проблему?
[примечание, я не могу использовать C++ 11]
В отношении несвязанной ноты вы уверены, что хотите указать указатель на элемент ', а не' std :: vector'? С помощью вектора вам не придется самостоятельно обрабатывать перераспределения. Кроме того, в конструкторе 'sparseMatrix', который вы показываете, вы инициализируете« емкость »до нуля и используете его для размера данных, которые вы выделяете. Вы уверены, что это такая хорошая идея? –
Мне пришлось это сделать, потому что для моего проекта мне не разрешено использовать stl-контейнеры. Каждый раз, когда элемент добавляется в матрицу, емкость увеличивается – user7337963