c++类:对方法的未定义引用

C++ class : undefined reference to method

本文关键字:未定义 引用 方法 c++      更新时间:2023-10-16

我有一些名为gSprite的类,它允许轻松地操作图像,操作等。当我完成了它的一些功能并修复了所有错误时,我试图使用它并获得了其他功能。下面是类的自定义创建者

gSprite *  crGSprite(sf::Sprite * sprsource){
return new gSprite(sprsource);
}
gSprite *  crGSprite(sf::Sprite * sprsource,int sx, int sy){
return new gSprite(sprsource,sx,sy);
}
gSprite *  crGSprite(std::vector<sf::Sprite> spr,int sx,int sy){
return new gSprite(spr,sx,sy);
}

所有的创建者都只是构造一个新对象并返回对它的引用。然后我有一个函数用于存储所有文件的数据,并在其他文件中创建它们,可以到达这些创建者:

gSprite * loadsprite(string path)
{
    sf::Sprite sprite;
    sf::Texture tex;
    tex.loadFromFile(path);
    sprite.setTexture(tex);
    gSprite * gspr = crGSprite(&sprite);
    addGSprite(gspr);
    return gspr;
}

一切都好。但是。类还包含一些函数。由于某种原因,当我尝试执行update()时,它有效,但当我尝试执行setPosition()时,它以"对gSprite::setPosition(int,int)的未定义引用"失败。下面是这两个函数和.hpp文件:

void update()
{
    sprite = anim_sprites[num];
    sprite.setPosition(sf::Vector2f(x,y));
    return;
}

void setPosition(int nx,int ny)
{
    x=nx;
    y=ny;
    return;
}

高压泵:

#ifndef Sprites_H_
#define Sprites_H_
extern sf::RenderWindow * windowsrc;
class gSprite {
    int x;
    int y;
    sf::Sprite sprite;
    std::vector<sf::Sprite> anim_sprites;
    sf::Vector2f size;
    bool anim;
    int num;
public:
    gSprite(sf::Sprite * sprsource);
    gSprite(sf::Sprite * sprsource,int sx, int sy);
    gSprite(std::vector<sf::Sprite> spr,int sx,int sy);
    void setSize(float x, float y);
    void resize(float x,float y);
    void scale(float x,float y);
    void draw_s();
    void update();
    void move(int nx,int ny);
    void setPosition(int nx,int ny);
};
gSprite * crGSprite(sf::Sprite * sprsource);
gSprite * crGSprite(sf::Sprite * sprsource,int sx, int sy);
gSprite * crGSprite(std::vector<sf::Sprite> spr,int sx,int sy);
void addGSprite(gSprite * sprtsource);
void drawGSprites();
#endif /* Sprites_H_ */

我在类声明中声明方法

当你写

void setPosition(int nx,int ny)
{
    x=nx;
    y=ny;
    return;
}

你定义了一个独立的函数,它不是任何类的一部分。要实现在gSprite类中声明的成员函数,您必须编写

void gSprite::setPosition(int nx,int ny)
{
    x=nx;
    y=ny;
    return;
}