2016-11-30 14 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

テンプレートの実装では、あなたは、名前空間が不足している、この使用:これは正しく動作しますが、私は `テーブル H1を使用して、メインファイルにテーブルのインスタンスを作成しようとする

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

を;'それは私を与えますこのスコープでは表が宣言されていないというエラーが発生しました。この問題を解決するにはどうすればよいですか? – user2896120

+0

まあ、 'main_savitch_12A :: table h1;のようにネームスペースを最初に扱わなければなりません。答えてくれてありがとうございます。すぐにお答えします。 – user2896120

+0

' main_savitch_12A :: table h1; ' – Amadeus

関連する問題