“使用继承和.h和.cpp文件在此上下文中保护属性”

时间:2018-03-10 15:11:39

标签: c++ file inheritance

我正在尝试使用Irrlicht编写游戏代码,但我遇到了这个问题,同时我将代码分成.h和.cpp文件。

编译器中的主要错误是“节点在此上下文中受到保护”。 Node是“GameObjectOverworld”的属性,并从“Player”(GameObjectOverworld子类)调用

这很好用,直到我分开.h和.cpp文件中的代码。

GameObjectOverworld.h

#ifndef __GAMEOBJECTOVERWORLD_H__
#define __GAMEOBJECTOVERWORLD_H__

#include <irrlicht.h>
#include <stdio.h>
#include "GameObject.h"

class GameObjectOverWorld : public GameObject{
    protected:
        scene::ISceneNode* node = nullptr; 
    public: 
        GameObjectOverWorld() {}
        core::vector3df getPosition(){return node->getPosition();}
};

#endif

player.h

#ifndef __PLAYER_H__
#define __PLAYER_H__

#include <irrlicht.h>
#include <stdio.h>
#include "GameObject.h"
#include "GameObjectOverworld.h"

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
class Player : public GameObjectOverWorld{
    private: 

        std::string name =""; 
        float speed = 15.0f; 
    public:
        Player() = default;
        void addPlayerModel(ISceneManager* smgraux, IVideoDriver* driveraux){}
        void move (char axis, int direction, float frameDeltaTime){}
};
#endif

和player.cpp(发送错误的那个)

#include "Player.h"

void addPlayerModel(ISceneManager* smgraux, IVideoDriver* driveraux){
    Player::node = smgraux->addCubeSceneNode(10.0f, 0, 0, core::vector3df(15.0f, 0.0f, 45.0f), core::vector3df(0, 0, 0), core::vector3df(1.0f, 1.0f, 1.0f));

    if (node)
    {

        node->setMaterialTexture(0, driveraux->getTexture("Materials/madero.jpg"));
        node->setMaterialFlag(video::EMF_LIGHTING, false);
    }

}

1 个答案:

答案 0 :(得分:2)

您忘记将方法addPlayerModel链接到班级:

变化:

void addPlayerModel(ISceneManager* smgraux, IVideoDriver* driveraux)

void Player::addPlayerModel(ISceneManager* smgraux, IVideoDriver* driveraux)

同时将Player::node更改为this->node,因为您的“节点”属性不是静态的。