is inaccessible within this context

155
17 июня 2019, 23:30

Пишу текстовую игру. Перенес общие функции в другой класс и возникла ошибка. Как исправить? Вот какая ошибка.

main.cpp: In function ‘int main(int, char**)’:
main.cpp:13:47: error: ‘void Living::set_pos(Map*)’ is inaccessible within this context
  player.set_pos ( map->find_map_coord ( 'D' ) );
                                               ^
In file included from Player.h:3,
                 from main.cpp:4:
Living.h:11:8: note: declared here
   void set_pos ( Map *pos );
        ^~~~~~~
main.cpp:13:47: error: ‘Living’ is not an accessible base of ‘Player’
  player.set_pos ( map->find_map_coord ( 'D' ) );
                                               ^
make: *** [makefile:2: all] Error 1

Вот main.cpp

#include <iostream>
#include <cstdio>
#include "Loader.h"
#include "Player.h"
int main(int argc, char **argv)
{
    Loader loader;
    loader.load ( "map" );
    Map *map = loader.get_map ( );
    map->set_sizes ( loader.width, loader.height );
    Player player;
    player.set_pos ( map->find_map_coord ( 'D' ) );
    return 0;
}

Вот living.h

#ifndef __living__
#define __living__
#include "Map.h"
#include <cstring>
class Living {
    protected:
        Map *pos;
        char *name;
    public:
        void set_pos ( Map *pos );
        void set_name ( const char *name );
        void walk_north ( );
        void walk_west ( );
        void walk_south ( );
        void walk_east ( );
};
#endif

Вот living.cpp

#include "Living.h"
void Living::set_name ( const char *name )
{
    int length = strlen ( name );
    this->name = new char [ length + 1 ];
    strncpy ( this->name, name, length );
    this->name [ length ] = 0;
}
void Living::walk_north ( )
{
    if ( pos->north->get_place ( ) == '*' ) {
    }
    pos = pos->north;
}
void Living::walk_west ( )
{
}
void Living::walk_south ( )
{
}
void Living::walk_east ( )
{
}
void Living::set_pos ( Map *pos )
{
    this->pos = pos;
}

Вот player.h

#include <string.h>
#include "Map.h"
#include "Living.h"
class Player : Living {
};
Answer 1

У class-ов родители по умолчанию приватные. Естественно, что вы не можете получить доступ к методам private родителя.

Нужно вот так:

class Player : public Living {};
READ ALSO
Сложить 50 чисел как в математике [закрыт]

Сложить 50 чисел как в математике [закрыт]

Сложить 50 чиселЕсли сложение не удалось то написать сообщение об ошибке

150
Как передать аргумент в std::thread по ссылке?

Как передать аргумент в std::thread по ссылке?

Как передать аргумент функции в std::thread по ссылке? Хоть моя функция принимает параметр по ссылке, но похоже, что объекты всё равно разные

154
Как обучить простую нейронную сеть

Как обучить простую нейронную сеть

Пытаюсь создать нейронную сеть xor с backpropagationВсе формулы подобрал правильно, но после обучения ответ при любом входе равен ~0

179