1

我有一个定义如下的标题

标题

#pragma once

#include <map>      
#include <string>
#include "gl\glew.h"
#include "glm\glm\glm.hpp"


class TextureAtlas
{
public:
    TextureAtlas(std::string fileName);
    ~TextureAtlas(void);

    // Returns the index of a sprite from its name
    //int getIndex(std::string name);

    // Returns the source rectangle for a sprite
    glm::vec4 getSourceRectangle(std::string name);

    // Returns the OpenGL texture reference
    GLuint getTexture();

    float getTextureHeight();
    float getTextureWidth();

private:
    float m_height;

    // Holds the sprite name and its index in the texture atlas
    //std::map<std::string, int> m_indices;

    // Holds the source rectangle for each sprite in the texture atlas
    std::map<std::string, glm::vec4> m_sourceRectangles;

    // The texture containing all of the sprite images
    GLuint m_texture;

    float m_width;
};

我在关联源的以下构造函数中遇到错误

资源

#include "TextureAtlas.h"
#include "Content\Protobuf\TextureAtlasSettings.pb.h"
#include <iostream> 
#include <fstream>                                      // ifstream

#define LOCAL_FILE_DIR "Content\\"

TextureAtlas::TextureAtlas(std::string fileName)
{
    TextureAtlasSettings::TextureAtlasEntries settings;

    std::string filePath(LOCAL_FILE_DIR);
    filePath.append(fileName);

    ifstream file(filePath, ios::in | ios::binary);     // ERROR!

    if (file.is_open())
    {
        if (!settings.ParseFromIstream(&file)) 
        {
            printf("Failed to parse TextureAtlasEntry");
        }
    }

    int numEntries = settings.entries().size();

    for (int i = 0; i < numEntries; i++)
    {
        m_sourceRectangles[settings.entries(i).name()] = glm::vec4(
            settings.entries(i).x(),
            settings.entries(i).y(),
            settings.entries(i).height(),
            settings.entries(i).width()
            );
    }
}

TextureAtlas::~TextureAtlas(void)
{
}

问题是

IntelliSense:标识符“ifstream”未定义

如果我将 std:: 放在它前面(std::ifstream),那么这会消除上面的错误,但会导致以下错误

错误 C2653:“ios”:不是类或命名空间名称

到底是怎么回事?这没有任何意义,因为我认为我已经包含了我需要的一切?!

4

1 回答 1

1

在您发布的代码中,您必须在类型前面加上命名空间名称,即std::ifstreamstd::ios.

于 2012-09-09T11:26:42.933 回答