次のように定義されたヘッダーがあります
ヘッダ
#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':クラスまたは名前空間の名前ではありません
何が起こっている?必要なものはすべて含まれていると思うので意味がありませんか?!