Задать вопрос
  • C++.sfml. функции не видят массив другого класса. Где искать проблему?

    @InokWanterer Автор вопроса
    Ultra-Bad Coder, в данном случае уверен так как проверял уже все варианты.и этот фаил ничего не использует из //#include "pers.h"
  • C++.sfml. функции не видят массив другого класса. Где искать проблему?

    @InokWanterer Автор вопроса
    Tony, engine.h только создает экземпляр map через конструктор.
    public:
       
        mapR maper;  // 'локация
        pers m_Bob; // персонаж
        npc job; // npc 
        // Конструктор движка
        engine();
        // Функция старт вызовет все приватные функции
        void start();
        
    };

    единственное место где используется TileMaps это функция в классе engine.h Drew() которая отрисовывает тайлы она прекрасно видит этот массив вот фрагмент:
    #include "engine.h"
    
    void engine::draw()
    {
        // Стираем предыдущий кадр
        m_Window.clear(Color::Black);
    
     for (int i = 0; i < maper.HEIGHT_MAP; i++)
            for (int j = 0; j < maper.WIDTH_MAP; j++)
            {
                if (maper.TileMaps[i][j] == ' ')  maper.s_map.setTextureRect(IntRect(0, 0, 32, 32)); //если встретили символ пробел, то рисуем 1й квадратик
                if (maper.TileMaps[i][j] == 's')  maper.s_map.setTextureRect(IntRect(32, 0, 32, 32));//если встретили символ s, то рисуем 2й квадратик
                if (maper.TileMaps[i][j] == '0') maper.s_map.setTextureRect(IntRect(64, 0, 32, 32));//если встретили символ 0, то рисуем 3й квадратик
                if (maper.TileMaps[i][j] == 'f') maper.s_map.setTextureRect(IntRect(96, 0, 32, 32));//добавили цветок
                if (maper.TileMaps[i][j] == 'h') maper.s_map.setTextureRect(IntRect(128, 0, 32, 32));//и сердечкоtRect(128, 0, 32, 32));//и сердечко
                
                maper.s_map.setPosition(j * 32, i * 32);
                m_Window.draw(maper.s_map);
            }


    а вот когда использую в функции(взаимоотношения с картой) из экземляра класса игрока то выдает ошибку идентификатор не определен
    #include "pers.h"
    #include "engine.h"//mapR.h не инклудю так как он подключен в engine.h
    
    void pers::interactionWithMap()
    {
        for (int i = y / 32; i < (y + h) / 32; i++)//проходимся по тайликам, контактирующим с игроком, то есть по всем квадратикам размера 32*32, которые мы окрашивали в 9 уроке. про условия читайте ниже.
            for (int j = x / 32; j < (x + w) / 32; j++)//икс делим на 32, тем самым получаем левый квадратик, с которым персонаж соприкасается. (он ведь больше размера 32*32, поэтому может одновременно стоять на нескольких квадратах). А j<(x + w) / 32 - условие ограничения координат по иксу. то есть координата самого правого квадрата, который соприкасается с персонажем. таким образом идем в цикле слева направо по иксу, проходя по от левого квадрата (соприкасающегося с героем), до правого квадрата (соприкасающегося с героем)
            {
                if (maper.TileMaps[i][j] == '0')//вот тут он не видит массив хоть убей
                {
                    if (dy > 0)//если мы шли вниз,
                    {
                        y = i * 32 - h;//то стопорим координату игрек персонажа. сначала получаем координату нашего квадратика на карте(стены) и затем вычитаем из высоты спрайта персонажа.
                    }
                    if (dy < 0)
                    {
                        y = i * 32 + 32;//аналогично с ходьбой вверх. dy<0, значит мы идем вверх 
                    }
                    if (dx > 0)
                    {
                        x = j * 32 - w;//если идем вправо, то координата Х равна стена (символ 0) минус ширина персонажа
                    }
                    if (dx < 0)
                    {
                        x = j * 32 + 32;//аналогично идем влево
                    }
                }
    }


    уже пытался вынести TileMaps в глобальную область тогда вылазит другая ошибка в коде ничего не подчеркивает но при компиляции пишет что Символ символа был определен несколько раз.

    За этой ошибкой следует Неустранимая ошибка LNK1169.

    Возможные причины и решения
    Как правило, эта ошибка означает, что вы нарушили одно правило определения, которое допускает только одно определение любого используемого шаблона, функции, типа или объекта в данном объектном файле и только одно определение во всем исполняемом объекте для внешних видимых объектов или функций.

    Ниже приведены некоторые распространенные причины этой ошибки.