我目前正在尝试更多地了解 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

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

sf::Sprite GetGraphic()
{
  return _sprite;
}

我没有发现其中任何一个有任何问题,但是当我尝试编译它们时,我收到来自 g++ 的以下错误:
WorldObject.cpp: In function ‘sf::Sprite GetGraphic()’:
WorldObject.cpp:9: error: ‘_sprite’ was not declared in this scope
make: *** [WorldObject.o] Error 1

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

最佳答案

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

sf::Sprite WorldObject::GetGraphic()
{
  return _sprite;
}

代替
sf::Sprite GetGraphic()
{
  return _sprite;
}

请注意,如果从程序中的某处调用此函数,C++ 编译器只会提示缺少 WorldObject::GetGraphic

10-04 23:30