这个私有变量如何"未在此范围内声明"?

XBi*_*13X 6 c++ oop scope declare sfml

我目前正在尝试更多地了解C++中的面向对象设计(熟悉Java)并且遇到了一些问题.我试图在一个使用SFML构建的游戏中学习这些原理的项目用于图形和音频.我有以下两个文件.

WorldObject.h

#ifndef WORLDOBJECT_H
#define WORLDOBJECT_H
#include <SFML/Graphics.hpp>
#include <string>
#include "ImageManager.h"

class WorldObject
{
 private:
  sf::Sprite _sprite;
  void SetImagePath(std::string path);
  sf::Sprite GetGraphic();
};
#endif
Run Code Online (Sandbox Code Playgroud)

WorldObject.cpp

#include "WorldObject.h"
void WorldObject::SetImagePath(std::string path)
{
  _sprite.SetImage(*gImageManager.getResource(path));
}

sf::Sprite GetGraphic()
{
  return _sprite;
}
Run Code Online (Sandbox Code Playgroud)

我没有看到任何这些问题,但是当我尝试编译它们时,我从g ++收到以下错误:

WorldObject.cpp: In function ‘sf::Sprite GetGraphic()’:
WorldObject.cpp:9: error: ‘_sprite’ was not declared in this scope
make: *** [WorldObject.o] Error 1
Run Code Online (Sandbox Code Playgroud)

我在这段代码中缺少什么?试图理解设置继承层次结构的正确方法已经导致游戏开发中迄今为止遇到的大多数问题,但我知道这主要是因为我更习惯于使用Java的继承模型而不是C++的多重模型.继承模型.

Osw*_*ald 11

GetGraphics您定义的函数WorldObject.cpp不是WorldObject类的成员.使用

sf::Sprite WorldObject::GetGraphic()
{
  return _sprite;
}
Run Code Online (Sandbox Code Playgroud)

代替

sf::Sprite GetGraphic()
{
  return _sprite;
}
Run Code Online (Sandbox Code Playgroud)

请注意,WorldObject::GetGraphic如果从程序中的某个位置调用此函数,C++编译器只会抱怨丢失.