0

目標: 2 つのテンプレート パラメーターを持つクラスから継承する。

エラー

エラー エラー C2143: 構文エラー: '<' の前に ',' がありません

コード

template< typename Type >
class AssetManager : public IsDerivedFromBase< Type, Asset* >
{
    // Class specific code here
};

知っておくべきこと:char* Asset は、を getter/setter でラップするだけのクラスであり、基本的にが の派生物であるIsDerivedFromBaseかどうかをテストするために使用されます。これらのクラスのセットは、独自の小規模な Visual Studio 2012 プロジェクトに分離されており、すべての機能が完全にテストされると、メイン プロジェクトに統合されます。TypeAsset

コメントに基づくいくつかの編集

これまでご愛顧いただき、誠にありがとうございました。いくつかの詳細を次に示します。

IsDerivedFromBase.h

#ifndef ISDERIVEDFROMBASE_H
#define ISDERIVEDFROMBASE_H

#include< iostream > // For access to NULL

namespace Fenrir
{
    template< typename Type, typename Base >
    class IsDerivedFromBase
    {
    private:
        static void Constraints( Type* _inheritedType )
        {
            Base* temp = NULL;

            // Should throw compiler error if
            // this assignment is not possible.
            temp = _inheritedType;
        }

    protected:
        IsDerivedFromBase( ) { void( *test )( Type* ) = Constraints; }
    };
}

#endif

: このクラスは、記事で読んだクラスに基づいています。それ以来、望ましい結果を達成するためのより良い方法を見つけました。ただし、このエラーの原因を理解したいと思います。

AssetManager.h"

#ifndef ASSETMANAGER_H
#define ASSETMANAGER_H

#include "IsDerivedFromBase.h"

namespace Fenrir
{
    template< typename Type >
    class AssetManager : public IsDerivedFromBase< Type, Asset* >
    {
        // Class specific code
    };
}

#endif

クラス固有のコードを最小限に抑えて、この投稿をできるだけきれいに保ちます。さらに情報が必要な場合はお知らせください。追加できます:)。

4

2 に答える 2

0

興味深いことにばかげた私の問題を解決しました。それで、(ジェシー・グッドからの)コメントのために、私は自分のインクルードをざっと見てみました。これは小さな「すぐに使える」種類のプロジェクトだったので、私はあまり注意を払っていませんでした。エラーが発生した場所は正確にはわかりませんが、AssetManagerがIsDerivedFromBaseについて認識していないことがわかったので、次のコードブロックを設定して、どこにでもたくさんの#includeステートメントを記述せずにその問題を解決しました 。

// Contact point houses all of the include files
// for this project to keep everything in one place.

#ifndef CONTACTPOINT_H
#define CONTACTPOINT_H

#include "Asset.h"
#include "Sprite.h" 
#include "IsDerivedFromBase.h"
#include "GenericManager.h"
#include "AssetManager.h"   

#endif

今、私はこれをすべてのヘッダーに含めるだけで、すべてが順調です。私はC++を1年以上プログラミングしてきましたが、これに遭遇したことはありません。これは、新しいプログラミングを学ぶための良い教訓です。

皆さんの助けに感謝します:)

于 2012-07-30T22:20:29.170 に答える
0

このエラー メッセージは、コンパイラが予期しない識別子に遭遇した場合によく発生するため、最初の推測では、その時点でコンパイラに認識されていないことが考えられIsDerivedFromBaseます(適切なヘッダーが含まれていなかった可能性があります) または、 がテンプレートでない場合、コンパイラはその後に (または)IsDerivedFromBaseも期待します。,;

于 2012-07-29T22:15:14.790 に答える