标识符" KeyboardController"未定义

时间:2015-03-01 13:44:14

标签: c++ oop interface

编辑:解决了!使用πάνταῥεῖ和molbdnilo的建议我将类定义放在头文件中,并将我的对象声明为指针。我还通过main.cpp底部的“kc-> move(text)”取消引用指针。我最后还将文本作为参考传递,以便当窗口在main.cpp下更新时,控制器对其进行的任何更改都会坚持使用。 的 /修改

我试图使用C ++在VS2010中创建一个简单的流氓式游戏。与此同时,我希望将我正在学习的OOP概念纳入其中(使用多个互联网资源进行自学)。

我遇到问题的概念是实现接口(我读过的不是c ++的东西,但无论如何都可以这样做)。我的想法是为控制器创建一个接口,其中KeyboardController是一个控制器和GamepadController(即将推出!)是一个控制器。

在main.cpp中我包含了我的控制器接口的头文件(抽象类?)。我还尝试使用“KeyboardController kc”进行声明;哪个错误的KeyboardController是未定义的。然后我尝试了“MyController kc = new KeyboardController();”基于搜索其他问题并盲目地尝试修复没有好结果(我也不认为这会起作用,因为MyController不应该是具体的,我得到的错误证实了这一点。)

正如我在上面暗示的那样,我已经阅读了数十个“标识符'X'未定义”的帖子,但大多数问题似乎来自不正确(无人看守或冗余)的问题。

以下是我决定在我用尽之前将其保留的代码。

的main.cpp

#include <SFML/Graphics.hpp>
#include "mycontroller.h"

int main()
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "SFML works!");
    // declaring my class
    MyController kc = new KeyboardController();
    // KeyboardController kc;

    sf::Text text, hud;
    sf::Font font;
    if (!font.loadFromFile("arial.ttf"))
    {
        // error...
    }

    text.setFont(font);
    hud.setFont(font);
    text.setString("X");
    hud.setString("You wake up in a black void.");
    text.setCharacterSize(12);
    text.setColor(sf::Color::White);
    text.setStyle(sf::Text::Bold);
    text.setPosition(400, 300);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            // check the type of the event...
            switch (event.type)
            {
                // window closed
                case sf::Event::Closed:
                window.close();
                break;

                // key pressed
                case sf::Event::KeyPressed:
                   kc.move(text); // using method from my declared class
...

mycontroller.h (我在这里已经注释掉了KeyboardController,因为我相信它会进入下一个文件.cpp以及构造函数)

#ifndef MyController_H
#define MyController_H
/* This header file is to create an interface for my controllers */

class MyController {
    public:
       // MyController(){}
        virtual ~MyController(){}
        virtual void move(sf::Text player) = 0;
};

/*
class KeyboardController : public MyController{
    public:
      //  KeyboardController(){}
       ~KeyboardController()
        virtual void move(sf::Text player);
};
*/
#endif

mycontroller.cpp

#include <SFML/Graphics.hpp>
#include "mycontroller.h"
/* This file is where I intend to instantiate my concrete controllers */

class KeyboardController : public MyController{
    public:
       // KeyboardController();
       ~KeyboardController();
        virtual void move(sf::Text player);
};

/*
KeyboardController::KeyboardController()
{
}
*/

KeyboardController::~KeyboardController()
{
}

void KeyboardController::move(sf::Text player)
{
    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            {
                player.move(-4, 0);
            }
}

感谢您花时间阅读本文!非常感谢任何帮助。

0 个答案:

没有答案