2009-10-19 2 views
15

このエラーは何を意味していますか?'テンプレートタイプではありません'

Generic.h:25: error: 'Generic' is not a template type 

Here's Generic。

template <class T> 
class Generic: public QObject, public CFG, public virtual Evaluator { 
    Q_OBJECT 
    std::string key_; 
    std::vector<std::string> layouts_; 
    std::vector<std::string> static_widgets_; 
    std::map<std::string, std::vector<widget_template> > widget_templates_; 
    std::map<std::string, Widget *> widgets_; 
    int type_; 
    LCDWrapper *wrapper_; 

    protected: 
    LCDText *lcdText_; 

    public: 
    Generic(Json::Value *config, int type); 
    ~Generic(); 
    void CFGSetup(std::string key); 
    void BuildLayouts(); 
    void StartLayout(); 
    int GetType() { return type_; } 
    //T *GetLCD() { return lcd_; } 
    LCDText *GetLCDText() { return lcdText_; } 
    virtual void Connect(){}; 
    virtual void SetupDevice(){}; 
    std::map<std::string, Widget *> Widgets(); 
    std::string CFG_Key(); 
    LCDWrapper *GetWrapper() { return wrapper_; } 

}; 

他のクラスをサブクラス化するという問題はありますか?その理論をテストする実験を試みましたが、このエラーは発生しませんでした。

編集:Ok、私はジェネリックを他の場所でテンプレートクラスにしないで宣言することができると指摘しました。それは本当だ。テンプレートを作成すると、別のエラーが発生します。

Property.h:15:エラー:ISO C++はすぐにジェネリック上記#includeディレクティブは閉鎖を持っているかどうかを確認するには無いタイプ

template <class T> 
class Generic; 

class Property : public CFG { 
    Generic *visitor; // line 15 
    bool is_valid; 
    QScriptValue result; 
    Json::Value *expression; 
    public: 
    Property(const Property &prop); 
    Property(Generic *v, Json::Value *section, std::string name, Json::Value *defval); 
    ~Property(); 
    bool Valid(); 
    int Eval(); 
    double P2N(); 
    int P2INT(); 
    std::string P2S(); 
    void SetValue(Json::Value val); 
    Property operator=(Property prop); 
}; 
+1

ライン25は何ですか? 'Q_OBJECT'行ですか? – eduffy

+0

だこと:クラスジェネリック:公共QObjectを、公共のCFG、パブリック仮想評価者{ – Scott

+0

恩赦冗長性が、一般的にはかなり一般的な名前である、あなたは、わかりやすい名前に変更する場合があります。そして/または(しかしほとんどと)名前空間に配置します。 – GManNickG

答えて

6

これはあなたの問題である場合、私はわからないんだけど、あなたはテンプレートクラスとサブクラス QObjectをすることはできません。

Here is more information about that.

+0

私はそれを恐れていました。それを指摘してくれてありがとう。 – Scott

+0

ようこそ。 – Gaston

+1

申し訳ありませんが、あなたのリンクは情報を一切指しません。 – PypeBros

2

チェックして「一般」の宣言を禁止。そのクラス定義に基づいています。私は一度そのエラーを見て、それが原因でした。

0

このエラーはC++コンパイラ、またはQt MOCによって生成されますか?実際にQt MOCをテンプレートクラスに適用することはできません。

+0

これはコンパイラからのものです。 – Scott

+0

ちなみにQObjectを削除しようとしましたが、まだエラーが出ます。 – Scott

4

Genericは既に別の場所に定義されている可能性がありますか?

+0

いいえ、そうではありません。ジェネリックはGeneric.hにのみあります。 – Scott

+0

待って、実際に私はスタブとして他の場所に持っています。 – Scott

+0

スタブはそれをテンプレートといいますか? – GManNickG

20

SOの別の場所でthis similar questionを見てください。あなたは、テンプレートクラスではなく、どこかでジェネリックを前方宣言していますか?

EDIT:あなたの2番目のエラーへの答えで ...

@Steveグイディは、他の場所で、このページの彼のコメントで、この問題を解決しました。ジェネリックをテンプレートクラスとして一貫して宣言したので、Generateを非フォーム形式で使用しているため、Property.hの15行目は不正です。

15行目で使用しているスペシャライゼーションを指定する必要があります。

template <class T> 
class Generic; 

class Property : public CFG { 
    Generic<int> *visitor; // specialised use of Generic 
    bool is_valid; 
    QScriptValue result; 
    Json::Value *expression; 
    public: 
    Property(const Property &prop); 
    Property(Generic *v, Json::Value *section, std::string name, Json::Value *defval); 
    ~Property(); 
    bool Valid(); 
    int Eval(); 
    double P2N(); 
    int P2INT(); 
    std::string P2S(); 
    void SetValue(Json::Value val); 
    Property operator=(Property prop); 
}; 
+0

ええ、ええ、そのような場合は、私のコードを介してそのようなちょっとしたトリクルがダウンします。まあ、それは正当な理由だから、私は気にしない。 – Scott

+0

Trickles downというのは、私はTのアウト・アウトを実行しなければならないということです。 :) – Scott

+0

ええ - あなたはそれを持っている。 – razlebe

2

あなたの問題は、鋳型なしのparamとジェネリックタイプの訪問者を定義しているということです。

クラスをGenericとして宣言したとき、15行目でコンパイラは宣言を見つけました。しかし、テンプレートで宣言を変更すると、Genericクラスはもはや見つかりません。そのような

template <class T> 
class Generic; 

class Property : public CFG { 
    Generic<SomeType> *visitor; // line 15 

または

template <class T> 
class Generic; 

template <class T> 
class Property : public CFG { 
    Generic<T> *visitor; // line 15 

または

何か:

だから、あなたのような何かを行う必要があります。

0

別にあなたが正しくテンプレートクラスを定義していない問題(そのため、あなたのエラーメッセージ)から、あなたはテンプレートクラスでQ_OBJECTを使用することはできません。 詳細はhttp://doc.trolltech.com/qq/qq15-academic.htmlを参照してください。

関連する問題