我遇到了两个我无法弄清楚的相同错误。错误如下 “二进制'<',找不到使用'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文件