2015-08-11 1 views
0

Хорошо, я думал, что файлы реализация для шаблонных классов выясняли, но, видимо, нет ... У меня есть следующие файлы в 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

Любая помощь по устранению этих ошибок будет очень признательна!

+0

Попробуйте представить [MCVE] (http://stackoverflow.com/help/mcve). Если каждая функция генерирует эти ошибки, оставьте только одну функцию. Удалите ненужные объявления участников и включите директивы. –

+0

Не удается выполнить M, C и V части. М: в нем много определений функций, этого было бы достаточно. C: нет State.h V: я не могу взять ваш пример и скомпилировать его и получить все те же ошибки, которые вы получаете. Если это действительно ваш исходный код дословно, обратите внимание, что он имеет много закрывающих фигурных скобок. –

+0

Хорошо, я обновил свое оригинальное сообщение – Rabadash8820

ответ

0

Удивительно, что вы добавили свои файлы .inl к вашему проекту как автономные единицы перевода, а компилятор попытался скомпилировать их как автономные единицы перевода.

Эти файлы не имеют никакого смысла как автономные единицы перевода, и они не будут компилироваться как таковые. К ним относятся файлы (как заголовочные файлы). Они должны рассматриваться в качестве заголовочных файлов по проекту. Они не должны собираться напрямую.

+0

Итак, как мне указать компилятору, что они не являются единицами перевода? – Rabadash8820

+0

@ Rabadash8820: Это зависит от вашего компилятора. Например, в Visual Studio вы * не добавляете их в категорию «Исходные файлы». Если вы хотите добавить их в проект, добавьте их в категорию «Заголовочные файлы». Кроме того, вы можете просто исключить их из сборки в настройках проекта. – AnT

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

  • Нет связанных вопросов^_^