Odd intellisense behaviour in VS2012 using C++. Ignores #include?

I have a header defined as follows

header
#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;
};

I'm getting errors with the following constructor for the associated source

source
#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)
{
}

The problem is

IntelliSense: identifier "ifstream" is undefined

If I put std:: infront of it (std::ifstream) then that removes the error above but causes the following error

error C2653: 'ios' : is not a class or namespace name

What is going on? It doesn't make any sense as I think I have included everything I need?!

Answers


In the code as you posted it you have to prefix the types with the namespace name, i.e. std::ifstream and std::ios.


Need Your Help

loginview problem in tabbar application

iphone tabbar loginview

i have a 3 tabbar in my app. in my Appdelegate i have a reference to loginview where i am popingup loginview if user is not logged in.here is method.

Cannot bind dropdownlist to my linq queries

vb.net data-binding datasource html-select linqdatasource

I am dragging in dropdownlist controls to my aspx page. When I write any query in the asppx.vb page and try to bind it to my ddl the ddl remains unbound. I have tried several different ways of do...

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.