在c ++中接口和继承模板类

时间:2016-08-08 12:59:51

标签: c++ class templates inheritance template-classes

我使用模板类继承的项目有问题。 我们的想法是让代理具有指向msgtype的指针。 msgtypes可以有所不同,这就是模板类进入游戏的原因。 想法是通过接口类存储不同的消息类型。 要使用我需要的msgtype实例初始化Agent中的接口指针 包括#include“msginterface.h”和#include“msgtype.h”。 不幸的是,如果我只包含“msginterface.h”,项目编译就好了。 但是如果我在Agent.h中添加#include“msgtype.h”,我需要进行初始化。我得到了这个疯狂的错误:

我得到的错误是:

  

错误:之前预期的模板名称   '<'令牌类消息:public   MsgInterface {                                 ^ /home/Catkin/src/template_class/src/msg.h:10:30:   错误:在'<'标记之前预期'{'   /home/Catkin/src/template_class/src/msg.h:10:30:   错误:预期的nonqualified-id之前   '<'令牌

你知道这个错误的原因是什么吗?

可以使用以下代码重现错误:

  

// main.cpp中

#include <stdio.h>
#include <iostream>
#include <agent.h>
using namespace std;

int main(void){
cout<<"Hello world"<<endl;
}
  

// agent.h

#ifndef _AGENT
#define _AGENT
#include "msginterface.h"
#include "msgtype.h"

class Agent{
MsgInterface* msg;
};
#endif
  

// msginterface.h

#ifndef _MSGINTERFACE
#define _MSGINTERFACE

#include <stdio.h>
#include <agent.h>
using namespace std;

class Agent; //Forward Declaration
class MsgInterface{
Agent* agent;
};
#endif
  

// msg.h

#ifndef _MSG
#define _MSG

#include <stdio.h>
#include <agent.h>
#include "msginterface.h"
using namespace std;

template <class T>
class Msg:public MsgInterface<T>{
};
#endif
  

// msgtype.h

#ifndef _MSGTYPE
#define _MSGTYPE
#include <stdio.h>
#include "agent.h"
#include "msg.h"
using namespace std;

template <class S>
class MsgTape:public Msg<S>{
};
#endif

1 个答案:

答案 0 :(得分:0)

你没有将MsgInterface声明为一个模板化的类。

尝试类似:

template<class Agent>
class MsgInterface 
{
  Agent* agent;
}