У меня есть заголовок, определенный следующим образом
#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 :: infront из него (std :: ifstream), то это устранит вышеуказанную ошибку, но приведет к следующей ошибке
ошибка C2653: «ios»: не имя класса или пространства имен
Что здесь происходит? Это не имеет никакого смысла, так как я думаю, что я включил все, что мне нужно ?!
В коде, который вы опубликовали, вы должен префикс типов с именем пространства имен, т.е. std::ifstream
а также std::ios
,
Других решений пока нет …