无法为std :: map定义operator <

时间:2018-10-21 18:02:22

标签: c++

我遇到了两个我无法弄清楚的相同错误。错误如下 “二进制'<',找不到使用'const_Ty'类型的左操作数(或没有可接受的转换)的运算符”。

在有人将此问题标记为重复之前,我可能已经读过所有其他有关此类错误的文章。但是这些帖子都没有帮助我解决和理解我遇到的问题。

  

默认情况下,std :: map(和std :: set)使用operator <确定排序。因此,您需要在类上定义operator <。 -GManNickG。从帖子-std :: maps中,以用户定义的类型为键。

所以他说我需要一个<运算符,因为std :: map需要它来确定排序。这可能是我的错误发生的地方。

MasterRender.h

class MasterRenderer {
public: 
   void cleanUp();
   void render(Light light, Camera camera);
   void processEntity(Entity entity);
private:
   std::map<TexturedModel, std::vector<Entity>> entites;
};

MasterRender.cpp

void MasterRenderer::processEntity(Entity entity)
{

    TexturedModel entityModel = entity.getModel();
    std::vector<Entity> batch = entites[entityModel];
    if (!batch.empty()) {
        batch.emplace_back(entity);
    }
    else {
        std::vector<Entity> newBatch;
        newBatch.emplace_back(entity);
        entites.emplace(entityModel, newBatch);
    }
}

我很确定在这里出现错误之一。

Renderer.h

class Renderer
{
    public:
    void render(std::map<TexturedModel, std::vector<Entity>> entites);
}

Renderer.cpp

void Renderer::render(std::map<TexturedModel, std::vector<Entity>> entites){
for (auto model : entites) {
    prepareTexturedModel(model.first);
    std::vector<Entity> batch = entites[model.first];
    for (auto entity : batch) {
        prepareInstance(entity);
        glDrawElements(GL_TRIANGLES, model.first.getModel().getVertecies(), 
        GL_UNSIGNED_INT, 0);
    }
    unbindTexturedModel();
  }
}

这里是秒数错误。

TexturedModel.h

class TexturedModel
{
public:
      TexturedModel(RawModel model, ModelTextures texture)
          :m_model(model), m_texture(texture){};

      const RawModel getModel() const{
           return m_model;
      };

      ModelTextures getTexture() {
           return m_texture;
      };

private:
      RawModel m_model;
      ModelTextures m_texture;

};

我认为如果我没有记错的话,我需要在TexturedModel类和Entity类中实现operator <。但是我不知道该怎么写。 我很感谢我能获得的所有帮助。

注意-我尚未复制整个标头和cpp文件

0 个答案:

没有答案