C++ visualc&x2B+;模板语法错误
我有一个头文件C++ visualc&x2B+;模板语法错误,c++,visual-studio,templates,visual-c++,C++,Visual Studio,Templates,Visual C++,我有一个头文件 #include <SFML\Graphics.hpp> #include <SFML\Graphics\Drawable.hpp> #include <SFML\System.hpp> #include <iostream> #ifndef _SPRITE_H_ #define _SPRITE_H_ namespace Engine { template <class T> class Sprit
#include <SFML\Graphics.hpp>
#include <SFML\Graphics\Drawable.hpp>
#include <SFML\System.hpp>
#include <iostream>
#ifndef _SPRITE_H_
#define _SPRITE_H_
namespace Engine
{
template <class T>
class Sprite
{
sf::Vector2<T> * vector;
sf::Sprite * sprite;
public:
Sprite(sf::Vector2<T> vect, sf::Sprite spr)
{
this->sprite = spr;
this->vector = vect;
}
~Sprite();
bool Draw(T x, T y, T rotate = 0);
sf::Image GetImage()
{
return this->sprite->GetImage();
}
};
};
#endif _SPRITE_H_
#包括
#包括
#包括
#包括
#如果是雪碧的话_
#定义精灵_
名称空间引擎
{
模板
雪碧
{
sf::Vector2*向量;
雪碧*雪碧;
公众:
精灵(sf::Vector2 vect,sf::Sprite spr)
{
这个->精灵=spr;
这个->向量=vect;
}
~Sprite();
布尔图(T x,T y,T旋转=0);
sf::Image GetImage()
{
返回此->精灵->获取图像();
}
};
};
#endif_SPRITE_H_
和一个源文件
#include <SFML/Graphics.hpp>
#include <SFML/Config.hpp>
#include "sprite.h"
template <typename T>
Sprite(sf::Vector2<T> vector, sf::Sprite sprite)
{
this->sprite = sprite;
this->vector = vector;
}
template <typename T>
bool Draw(T x, T y, T rotate)
{
return false;
}
#包括
#包括
#包括“sprite.h”
模板
精灵(sf::Vector2 vector,sf::精灵精灵)
{
这个->精灵=精灵;
这个->向量=向量;
}
模板
布尔图(T x,T y,T旋转)
{
返回false;
}
在VS 2010中,当我编译VC++时,会出现以下错误:
Error 2 error C2143: syntax error : missing ';' before '<' c:\users\owner\documents\visual studio 2010\projects\engine2\engine2\sprite.cpp 7 1 Engine2
Error 3 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\owner\documents\visual studio 2010\projects\engine2\engine2\sprite.cpp 7 1 Engine2
Error 4 error C2988: unrecognizable template declaration/definition c:\users\owner\documents\visual studio 2010\projects\engine2\engine2\sprite.cpp 7 1 Engine2
Error 5 error C2059: syntax error : '<' c:\users\owner\documents\visual studio 2010\projects\engine2\engine2\sprite.cpp 7 1 Engine2
Error 6 error C2059: syntax error : ')' c:\users\owner\documents\visual studio 2010\projects\engine2\engine2\sprite.cpp 7 1 Engine2
Error 7 error C2143: syntax error : missing ';' before '{' c:\users\owner\documents\visual studio 2010\projects\engine2\engine2\sprite.cpp 15 1 Engine2
Error 8 error C2447: '{' : missing function header (old-style formal list?) c:\users\owner\documents\visual studio 2010\projects\engine2\engine2\sprite.cpp 15 1 Engine2
错误2错误C2143:语法错误:缺少“;”在“之前,因为Sprite
在引擎中,所以它应该是
template <typename T>
Engine::Sprite<T>::Sprite(sf::Vector2<T> vector, sf::Sprite sprite)
{ ... }
或者用名称空间块将其包装。构造函数的外观仍应略有不同:P@Xeo哎哟,谢谢:)有时候我忘了我需要多少,谢谢你的回复。我遵照您的指示,它几乎解决了所有问题,除了我在问题中发布的一个小错误。@Holland您已经内联定义了构造函数(很抱歉,我错过了),因此您不需要在.cpp文件中定义它。不过,您必须定义析构函数。
template <typename T>
Engine::Sprite<T>::Sprite(sf::Vector2<T> vector, sf::Sprite sprite)
{ ... }
template <typename T>
bool Engine::Sprite<T>::Draw(T x, T y, T rotate)
{
return false;
}
namespace Engine {
template <typename T>
Sprite<T>::Sprite(sf::Vector2<T> vector, sf::Sprite sprite)
{ ... }
template <typename T>
bool Sprite<T>::Draw(T x, T y, T rotate)
{
return false;
}
}