2012-07-29 81 views
0

目标:从具有2个模板参数的类继承。从具有多个参数的模板类继承时出错

错误

错误错误C2143:语法错误:之前 '<'

守则失踪 ''

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

你需要的东西知道:资产是一个类,只是用一个吸气剂/设置器包装char*IsDerivedFromBase将用于基本上测试TypeAsset的衍生物。这些类的集合被隔离在自己的小型Visual Studio 2012项目中,并且一旦所有功能都已经过彻底测试,它们将被集成到主项目中。

基于评论

进行一些编辑谢谢你的帮助迄今为止,我真的很感激。这里有一些更多的细节:

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 

:这个类是基于关I类的一篇文章中读到的。我从那以后找到了一个更好的方法来达到预期的结果;然而,我想了解这个错误源于何处。

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 

保持类的特定代码到最低限度,以保持这个帖子整齐越好,如果需要更多的信息只是让我知道,我可以将它添加:)。

+1

什么是'IsDerivedFromBase'声明? – ulidtko 2012-07-29 22:05:30

+5

提供一个独立的,最小的示例,展示该问题。 – 2012-07-29 22:06:07

+0

似乎编译器不知道IsDerivedFromBase类,或者关于它是模板类。无论如何,还有其他错误,编译器给你。看看他们。 – ForEveR 2012-07-29 22:07:34

回答

0

解决了我的问题,这有趣的是愚蠢的。所以由于评论(来自Jesse Good)我快速浏览了我的包装。由于这是一个小型的“快速启动”类型的项目,我没有真正关注它们。我不知道确切的错误发生在哪里,但我发现AssetManager不知道IsDerivedFromBase所以我建立了以下代码块来解决这个问题,而不必编写一堆 #包括声明无处不在!

// 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++,并且从未遇到过这个问题,这是一个很好的教训,可以为任何新的编程学习。

感谢您的帮助大家:)

0

该错误信息是常见的,当编译器遇到它,没想到一个标识符,那么第一个猜测是,IsDerivedFromBase不是当时已知编译器(也许你没有包含适当的标题?)。或者,如果IsDerivedFromBase不是模板,则编译器也会在其后面预计为,(或;)。