2017-02-09 3 views
1

Извините, если я все еще спрашиваю об этом, но решение, которое мне дано, работает, если я делаю небольшой пример, если я попытаюсь реализовать его в своем проекте, я продолжаю получать ошибку в названии.
Это моя структура
нет соответствующего конструктора для инициализации '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]

+0

В отношении несвязанной ноты вы уверены, что хотите указать указатель на элемент ', а не' std :: vector'? С помощью вектора вам не придется самостоятельно обрабатывать перераспределения. Кроме того, в конструкторе 'sparseMatrix', который вы показываете, вы инициализируете« емкость »до нуля и используете его для размера данных, которые вы выделяете. Вы уверены, что это такая хорошая идея? –

+0

Мне пришлось это сделать, потому что для моего проекта мне не разрешено использовать stl-контейнеры. Каждый раз, когда элемент добавляется в матрицу, емкость увеличивается – user7337963

ответ

3

В шаблоне класса element хранить экземпляр типа T. Когда создается экземпляр element<T>, тогда val будет по умолчанию построено.

Когда вы используете point как T, вы получите сообщение об ошибке, поскольку у него нет конструктора по умолчанию.

+0

. Итак, проблема в том, что Struct? – user7337963

+0

@ user7337963 Да. То, как вы разработали свою разреженную матрицу, требует, чтобы содержащиеся типы имели конструктор по умолчанию. –

+0

Не могли бы вы дать мне небольшой пример? потому что это то, с чем я никогда не сталкивался – user7337963

Смежные вопросы