C++ 模板参数无效
我正在尝试获得模板的挂起,并具有以下代码: town.hC++ 模板参数无效,c++,templates,inheritance,C++,Templates,Inheritance,我正在尝试获得模板的挂起,并具有以下代码: town.h #ifndef TOWN_H #define TOWN_H namespace segregation { template <typename Pos, typename Resident, template <typename> class Container> class Town { public: Town(); virtual ~Town();
#ifndef TOWN_H
#define TOWN_H
namespace segregation {
template <typename Pos, typename Resident, template <typename> class Container>
class Town {
public:
Town();
virtual ~Town();
virtual Resident getResident(Pos address);
virtual void move(const Pos& from, const Pos& to);
virtual Container<Resident> getNeighbours(const Pos address);
};
}
#endif /* TOWN_H */
#ifndef FLAT_TOWN_H
#define FLAT_TOWN_H
#include "town.h"
#include <array>
#include <forward_list>
#include <utility>
namespace segregation {
template<int x, int y, class R>
using TownMap = std::array<std::array<R, y>, x>;
template <typename R>
using Neighbourhood = std::forward_list<R>;
using Pos = std::pair<int, int>;
template <int x, int y, class Resident>
class FlatTown: public Town<Pos, Resident, Neighbourhood<typename Resident>> {
private:
TownMap<x, y, Resident> m_townMap;
int m_neighbourhood_size;
public:
FlatTown(TownMap<x, y, Resident> t_townMap, int t_neighbourhood_size) :
m_townMap(t_townMap), m_neighbourhood_size(t_neighbourhood_size) {};
Resident getResident(const Pos & address);
void move(const Pos & from, const Pos & to);
Neighbourhood<Resident> getNeighbours(const Pos & address);
virtual ~FlatTown();
};
}
#endif /* FLAT_TOWN_H */
这将生成以下错误:
flat_town.h:18:76: error: template argument 1 is invalid
class FlatTown: public Town<Pos, Resident, Neighbourhood<typename Resident>> {
^~
flat_town.h:18:45: error: template argument 3 is invalid
class FlatTown: public Town<Pos, Resident, Neighbourhood<typename Resident>> {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
flat_town.h:18:76:错误:模板参数1无效
等级:平镇:公共镇{
^~
flat_town.h:18:45:错误:模板参数3无效
等级:平镇:公共镇{
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我对这些高阶模板感到非常不确定,非常感谢所有帮助
尊敬的Tobias,您错误地指定了template-template参数。只需指定模板的名称,即
class FlatTown: public Town<Pos, Resident, Neighbourhood> {
class FlatTown:公共城镇{
指定的模板参数不正确。只需指定模板的名称,即
class FlatTown: public Town<Pos, Resident, Neighbourhood> {
class FlatTown:公共城镇{
我更感兴趣的是为什么要编译头文件?为什么不编译包含头文件的源文件?从某种意义上说,您可能还应该阅读@Someprogrammerdude,这是获取最少样本的自然方式(只是切掉不必要的#包括“flat_town.h”
:))@某个程序员,我只是想一步一步地清除bug,因为这一步与模板相关,所以将g++限制在标题似乎很自然。我将阅读您引用的链接,谢谢。我更感兴趣的是为什么要编译标题文件?为什么不包括标题文件的源文件?您可能还应该阅读@Someprogrammerdude从某种意义上说,这是获取最少样本的自然方式(它只是切碎了一个不必要的#包括“flat\u town.h”
:)某个程序员,我只是想一次一步地清除bug,因为这一点与模板有关,它似乎是自然地将G++限制到标题中。我会阅读你引用的链接,当然感谢。顺便说一下,我来自Scala,我不确定我是否在C++中做了C++。你知道这种类型吗?ic编程是一条路?@user25470在不知道使用场景的情况下,很难说这一点。无论如何,当前的代码似乎很好。这个想法是模拟城市内的运动,看看如果居民之间有某种相似的偏好,隔离是否会自然发生,也就是说,如果是a型居民,他会离开一个社区,换成另一个更多的符合它的偏好。因为我想尝试一下,我想基地,小镇。h,当然是通用的!谢谢!顺便说一下,我来自Scala,我不确定我是否正在正确地做C++。你知道这种泛型编程是不是走的路?@ USER 25470很难说不知道。使用场景。无论如何,当前的代码似乎很好。这个想法是模拟一个城市内的运动,看看如果居民之间有某种相似的偏好,隔离是否会自然发生,也就是说,如果a型居民更符合自己的偏好,他们会离开一个街区去另一个街区。因为我想做一点实验,所以我想要基地,town.h,尽可能通用