Visual Studio 2010 — Нечетное поведение intellisense в VS2012 с использованием C ++. Игнорирует #include?

У меня есть заголовок, определенный следующим образом

заголовок

#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»: не имя класса или пространства имен

Что здесь происходит? Это не имеет никакого смысла, так как я думаю, что я включил все, что мне нужно ?!

1

Решение

В коде, который вы опубликовали, вы должен префикс типов с именем пространства имен, т.е. std::ifstream а также std::ios,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]