2016-11-30 4 views
0

Каждый раз, когда я создаю новый проект на своем рабочем месте, я сталкиваюсь с проблемой с шаблонами. Например, я создам новый класс, который CodeLite создаст файл .h и файл .cpp для меня, а затем я изменю этот .cpp-файл на .template, переименовав файл. Иногда это работает, а иногда нет. Иногда мне приходится убирать рабочее место, чтобы он работал, иногда мне нужно выйти из CodeLite и снова открыть его. На этот раз эти решения не работают для меня, но, может быть, я чего-то не хватает. Вот мой код:Файл шаблона работает неправильно в CodeLite?

.h файл

#ifndef TABLE1_H 
#define TABLE1_H 
#include <cstdlib> // Provides size_t 

namespace main_savitch_12A 
{ 
    template <class RecordType> 
    class table 
    { 
    public: 
     // MEMBER CONSTANT -- See Appendix E if this fails to compile. 
     static const std::size_t CAPACITY = 811; 
     // CONSTRUCTOR 
     table(); 
     // MODIFICATION MEMBER FUNCTIONS 
     void insert(const RecordType& entry); 
     void remove(int key); 
     // CONSTANT MEMBER FUNCTIONS 
     bool is_present(int key) const; 
     void find(int key, bool& found, RecordType& result) const; 
     std::size_t size() const { return used; } 
    private: 
     // MEMBER CONSTANTS -- These are used in the key field of special records. 
     static const int NEVER_USED = -1; 
     static const int PREVIOUSLY_USED = -2; 
     // MEMBER VARIABLES 
     RecordType data[CAPACITY]; 
     std::size_t used; 
     // HELPER FUNCTIONS 
     std::size_t hash(int key) const; 
     std::size_t next_index(std::size_t index) const; 
     void find_index(int key, bool& found, std::size_t& index) const; 
     bool never_used(std::size_t index) const; 
     bool is_vacant(std::size_t index) const; 
    }; 
} 
#include "table1.template" // Include the implementation. 
#endif 

.template файл

template<class RecordType> 
table<RecordType>::table(){ 
    used = 32; 
} 

основной файл

#include <stdio.h> 
#include "table1.h" 
int main(int argc, char **argv) 
{ 
    printf("hello world\n"); 
    return 0; 
} 

Мой т emplate и мои .h файлы называются table1. Ошибка, которую я получаю при запуске программы, находится в файле шаблона. Он гласит: «таблица не называет тип» Как я могу исправить эту проблему?

ответ

1

В вашей реализации шаблона ваши отсутствуют пространство имен, используйте:

template <class RecordType> 
main_savitch_12A::table<RecordType>::table() 
{ 
    used = 32; 
}; 
+0

Это работает правильно, но когда я пытаюсь создать экземпляр таблицы в главном файле с помощью 'таблицы h1,' это дает мне столбец с ошибкой не был объявлен в этой области. Как исправить эту проблему? – user2896120

+0

Хм, мне нужно сначала обратиться к пространству имен, как 'main_savitch_12A :: table h1;' Спасибо за ваш ответ. Я дам вам лучший ответ в ближайшее время. – user2896120

+0

Do 'main_savitch_12A :: table h1;' – Amadeus