每当我尝试使用地图编译我的游戏时,我都会收到错误...
“1> Map.cpp(57):错误C2678:二进制'>>' :没有找到哪个运算符采用'std :: stringstream'类型的左手操作数(或者没有可接受的转换)“
...但是当我初始化可碰撞时它会编译,如下面的那样...
bool collidable[100000];
任何人都可以帮助我,如果你发现我的代码有任何其他问题,你也可以提前指出,并提前感谢
MAP.h
#pragma once
class Map{
public:
std::vector<GLfloat> tileX, tileY, boxX, boxY, srcX, srcY;
std::vector<bool> collidable;
std::vector<int> collidableObjects;
GLfloat imageW, imageH, tileW, tileH;
int numberOfCollidableObjects, numberOfTiles;
void Load(const char* filename);
bool Collision(Object obj1);
void Display();
private:
GLuint image;
string filenametemp;
const char* mapImageFilename;
};
Map.cpp
#include "GEN.h"
void Map::Load(const char* filename){
stringstream temp;
string temp1;
ifstream file;
file.open(filename);
getline(file, filenametemp);
mapImageFilename = filenametemp.c_str();
getline(file, temp1);
temp.str(temp1);
temp >> imageW;
temp.clear();
getline(file, temp1);
temp.str(temp1);
temp >> imageH;
temp.clear();
getline(file, temp1);
temp.str(temp1);
temp >> tileW;
temp.clear();
getline(file, temp1);
temp.str(temp1);
temp >> tileH;
temp.clear();
numberOfTiles = 0;
while(!file.eof()){
getline(file, temp1);
temp.str(temp1);
temp >> tileX[numberOfTiles];
temp.clear();
getline(file, temp1);
temp.str(temp1);
temp >> tileY[numberOfTiles];
temp.clear();
getline(file, temp1);
temp.str(temp1);
temp >> srcX[numberOfTiles];
temp.clear();
getline(file, temp1);
temp.str(temp1);
temp >> srcY[numberOfTiles];
temp.clear();
getline(file, temp1);
temp.str(temp1);
temp >> collidable[numberOfTiles];
temp.clear();
if(collidable[numberOfTiles] == 1){
getline(file, temp1);
temp.str(temp1);
temp >> boxX[numberOfTiles];
temp.clear();
getline(file, temp1);
temp.str(temp1);
temp >> boxY[numberOfTiles];
temp.clear();
collidableObjects[numberOfCollidableObjects] = numberOfTiles;
numberOfCollidableObjects ++;
}
numberOfTiles ++;
}
file.close();
image = SOIL_load_OGL_texture(mapImageFilename, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT);
}
void Map::Display(){
glBindTexture(GL_TEXTURE_2D, image);
glBegin(GL_QUADS);
for(int n = 0;n < numberOfTiles; n++){
glTexCoord2f((srcX[n]/imageW), (srcY[n]/imageH));glVertex2f(tileX[n]-tileW/2, tileY[n]+tileH/2);
glTexCoord2f((tileW/imageW)+(srcX[n]/imageW), (srcY[n]/imageH));glVertex2f(tileX[n]+tileW/2, tileY[n]+tileH/2);
glTexCoord2f((tileW/imageW)+(srcX[n]/imageW), (srcY[n]/imageH)+(tileH/imageH));glVertex2f(tileX[n]+tileW/2, tileY[n]-tileH/2);
glTexCoord2f((srcX[n]/imageW), (srcY[n]/imageH)+(tileH/imageH));glVertex2f(tileX[n]-tileW/2, tileY[n]-tileH/2);
}
glEnd();
}
答案 0 :(得分:3)
问题是矢量&lt; bool&gt;是特殊的,并且(很可能)不是一个简单的单个bool元素数组。因此,您期望通过使用索引运算符获得的引用不是“对bool的引用”,而是另一个类(see this)对象。
你可以选择一些替代vector&lt; bool&gt;或者使用临时bool对象从流中读取,然后将其分配给vector元素。
bool temp_bool;
stream >> temp_bool;
collidable[numberOfTiles] = temp_bool;