Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ visualc&x2B+;模板语法错误_C++_Visual Studio_Templates_Visual C++ - Fatal编程技术网

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;
    }
}