即使使用好友类也无法访问私有类

问题描述 投票:0回答:1

我正在使用 comp4300 学习 C++ 和游戏设计。在课程的作业 2 中,讲师使用

friend
类来访问
entity
类,但我无法执行此操作,并且收到错误:

entity::entity 无法访问类“Entity”中声明的私有成员

实体.h

#pragma once
#include "component.h"
#include <memory>
#include <string>

class Entity
{
friend class EntityManager;
private:
    
    bool m_active = true;
    size_t m_id = 0;
    std::string m_tag = "Default";

    Entity(const size_t id, const std::string& tag);

public:

    std::shared_ptr<CTransform> cTransform;
    std::shared_ptr<CShape> cShape;
    std::shared_ptr<CCollision> cCollision;
    std::shared_ptr<CScore> cScore;
    std::shared_ptr<CLifespan> cLifespan;
    std::shared_ptr<CInput> cInput;

    bool isActive() const;
    const std::string& tag() const;
    const size_t id() const;
    void destroy();
};

EntityManager.h

#pragma once
#include "entity.h"
#include <vector>
#include <map>

typedef std::vector<std::shared_ptr<Entity> > EntityVec;
typedef std::map<std::string, EntityVec> EntityMap;

class EntityManager
{
    EntityVec m_entities;
    EntityMap m_entityMap;
    EntityVec m_toAdd;
    size_t    m_totalEntities{ 0 };

public:

    EntityManager();
    
    std::shared_ptr<Entity> addEntity(const std::string& tag);
    void update();

    EntityVec& getEntities();
    EntityVec& getEntities(std::string& tag);

};

EntityManager.cpp

#include "entitymanager.h"

EntityManager::EntityManager()
    :m_totalEntities(0)
{

}

std::shared_ptr<Entity> EntityManager::addEntity(const std::string& tag)
{
    auto e = std::make_shared<Entity>(m_totalEntities++, tag);
    m_toAdd.push_back(e);
    return e;   
}

我尝试了一切,但就是不行。

c++ c++17 game-development
1个回答
0
投票

EntityManager
不是试图直接访问私有
Entity
构造函数的人。
std::make_shared()
就是这个,所以需要将其改为
friend

© www.soinside.com 2019 - 2024. All rights reserved.