Хорошо, я думал, что файлы реализация для шаблонных классов выясняли, но, видимо, нет ... У меня есть следующие файлы в 2013 решении VS C++:Очень Confused на Шаблоне INL Файла
main.cpp
#include "StateManager.h"
#include "State.h"
enum class Derp {
Herp,
Lerp,
Sherp,
};
int main() {
Game2D::State<Derp>::Context context(5);
Game2D::StateManager<Derp> mgr(context);
return 0;
}
StateManager.h
#pragma once
#include "State.h"
namespace Game2D {
template<typename Id>
class StateManager {
private:
typename State<Id>::Context _context;
public:
explicit StateManager(typename State<Id>::Context context);
};
#include "StateManager.inl"
}
StateManager.inl
template<typename Id>
StateManager<Id>::StateManager(typename State<Id>::Context context) :
_context(context)
{ }
State.h
#pragma once
namespace Game2D {
template<typename Id>
class StateManager;
template<typename Id>
class State {
public:
struct Context {
Context(int);
int data;
};
private:
StateManager<Id>* _manager;
Context _context;
public:
State(StateManager<Id>&, Context);
virtual ~State();
};
#include "State.inl"
}
State.inl
template<typename Id>
State<Id>::Context::Context(int data) {
this->data = data;
}
template<typename Id>
State<Id>::State(StateManager<Id>& manager, Context context) :
_manager(&manager),
_context(context)
{ }
template<typename Id>
State<Id>::~State() { }
Строительство этого проекта дает следующие ошибки:
Ошибка 10 Ошибка C1903: не удается оправиться от предыдущей ошибки (s); остановки компиляции state.inl 9 1
Ошибка 9 Ошибка C2065: 'контекст': необъявленный идентификатор state.inl 8 1
Ошибка 7 Ошибка C2065: 'Менеджер': необъявленный идентификатор state.inl 7 1
Ошибка 8 ошибка C4430: отсутствует спецификатор типа - int. Примечание: C++ не поддерживает по умолчанию-ИНТ state.inl 7 1
Ошибка 6 ошибки C2039: 'State': не является членом '' глобального пространства имен'»state.inl 6 1
Ошибка 1 ошибка C2143: синтаксическая ошибка: отсутствует ';' перед '<' state.inl 2 1
Ошибка 2 Ошибка C2988: неузнаваемыми шаблон декларации/определение state.inl 2 1
Ошибка 3 Ошибка C2059: синтаксическая ошибка: '<' state.inl 2 1
ошибка 4 ошибка C3083: «Контекст»: символ слева от а «::» должен быть типом state.inl 2 1
ошибка 5 ошибка C2039: «Контекст»: не является членом ' `global namespace '' state.inl 2 1
Любая помощь по устранению этих ошибок будет очень признательна!
Попробуйте представить [MCVE] (http://stackoverflow.com/help/mcve). Если каждая функция генерирует эти ошибки, оставьте только одну функцию. Удалите ненужные объявления участников и включите директивы. –
Не удается выполнить M, C и V части. М: в нем много определений функций, этого было бы достаточно. C: нет State.h V: я не могу взять ваш пример и скомпилировать его и получить все те же ошибки, которые вы получаете. Если это действительно ваш исходный код дословно, обратите внимание, что он имеет много закрывающих фигурных скобок. –
Хорошо, я обновил свое оригинальное сообщение – Rabadash8820