is inaccessible within this context

123
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 чиселЕсли сложение не удалось то написать сообщение об ошибке

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

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

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

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

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

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

137