0
可能重複:
「Undefined reference to」 template class constructor在子類中調用基類的模板函數是否合法?
我剛開始使用模板,我是隨便它實際上是否是合法的調用模板函數的子類。我的問題是在下面的代碼中的模板函數ChangeSprite。它被稱爲子類,但這會產生鏈接錯誤。如果我刪除了模板部分,並且只給它一個我計劃使用它的多種事情之一,它可以正常工作,所以我擔心我無法做到這一點。
//base class
#pragma once
#include "Tile.h"
#include <list>
#include "Sprite.h"
#include "WindowCreater.h"
#include "Directx.h"
#define LeftClickParameters WindowCreator *gw, Mouse* mouse
struct Grid
{
SPRITE *sprite;
int width, hieght;
int w, h;
int x, y;
Grid(int width, int hieght,SPRITE *sprites);
list<Tile> tilew;
list<list<Tile>> tileh;
//methods
void savefile();
void openfile();
virtual void MoveLeft() = 0;
virtual void MoveRight() = 0;
virtual void MoveUp() = 0;
virtual void MoveDown() = 0;
virtual void addrow() = 0;
virtual void deleterow() = 0;
virtual void addcolumb() = 0;
virtual void deletecolumb() = 0;
//template functions
template <class T> void ChangeSprite(SPRITE *newSprite,list<T> tilew,list<list<T>> tileh);
// Virtual methods
virtual list<Tile> ReadTiles() = 0;
};
而這正是它被稱爲
//how the function is being called
void Map::Brush(SPRITE *newSprite, POINT MousePosition)
{
Grid::ChangeSprite<MapTile>(newSprite,mapTilew,mapTileh);
}
該函數的定義在哪裏? – 2012-01-29 23:27:26
爲什麼您的ChangeSprite函數首先需要成爲模板? – 2012-01-29 23:37:16