错误C2678:二进制'>>' :找不到运算符,它接受类型为'std :: stringstream的左手操作数

时间:2013-12-28 04:08:53

标签: c++ boolean stdvector stringstream

每当我尝试使用地图编译我的游戏时,我都会收到错误...

  

“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();
}

1 个答案:

答案 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;