2013-04-19 5 views
-1

У меня есть основная программа, которая использует два класса шаблонов Trans и Travel, и генерирует ошибку компиляции use of deleted function 'MakeColor::MakeColor(), а также: note: 'MakeColor::MakeColor()' is implicitly deleted because the default definition would be ill-formed. Как я могу это исправить?Что вызывает сообщение об ошибке функции функции?

Класс путешествия:

#include "Trans.hpp" 
template<typename A, typename B, typename C> 
class Travel { 

    public: 

    typedef Trans<A, B> CarType; 
    typedef Trans<C, int> BoatType; 

    typedef typename CarType::Newest NewestCar; 
    typedef typename BoatType::Newest NewestBoat; 
}; 

класс Trans:

template<typename A, typename B> 
class Trans { 

    public: 

    class Newest; 
}; 

Основная программа:

#include "Travel.hpp" 
#include "Trans.hpp" 


Travel<MakeColor, MakeMaterial, MakeSize> 

struct MakeColor { 
    CarType::NewestCar model; // error 
}; 

int main(){ 
... 
} 
+3

Может быть, я плохо шаблоны, но я чувствую, что что-то не так с всей этой конструкцией: 'Путешествие структура MakeColor {...}'. Что это должно делать? – Dialecticus

ответ

2

MakeColor не имеет конструктор по умолчанию, потому что CarType::NewestCar не имеет конструктор по умолчанию.

Вам нужно будет явно создать конструктор, который инициализирует model.

struct MakeColor { 
    MakeColor() : model(/* pass constructor parameters here */) {} 
    CarType::NewestCar model; // error 
}; 
Смежные вопросы