2013-03-30 2 views
1

Я пытаюсь загрузить загрузчик шейдерного файла в свою программу. Я копирую код с http://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/loading.php в разделе «Загрузка шейдеров». Ниже я имею более упрощенную нерабочую версию.Слева. должен иметь класс/struct/union

Я проверил, что я включил все файлы заголовков ifstream, что пример с веб-сайта включает в себя, но я получаю следующие ошибки:

error C2027: use of undefined type 'std::basic_ifstream<_Elem,_Traits>' 
error C2228: left of '.good' must have class/struct/union 

Мой заголовок файла выглядит следующим образом

#pragma once 
#include <iostream>  // std::cout, std::ios 
#include <sstream>  // std::stringstream 
#include <istream> 

using namespace std; 

class ShaderHandler 
{ 
public: 
    ShaderHandler(void); 
    virtual ~ShaderHandler(void); 
    unsigned long getFileLength(ifstream& sfile); 
}; 

и источник выглядит следующим образом:

#include "StdAfx.h" 
#include "ShaderHandler.h" 
#include <Windows.h> 
#include <GL/gl.h> 

ShaderHandler::ShaderHandler(void) 
{ 
} 
ShaderHandler::~ShaderHandler(void) 
{ 
} 

unsigned long ShaderHandler::getFileLength(ifstream& sfile){ 
    if(!(sfile.good())){ 
     return 0; 
    } 

    return 0; 
} 

ошибки происходят в Sourc e file на "sfile.good()". Я не уверен в первой ошибке, потому что не понимаю, как я использую неопределенный тип. Я думал, что нужно использовать ifstream. Я не вижу заголовочный файл, который я могу включить для «basic_istream». Согласно http://en.cppreference.com/w/cpp/io/basic_istream, он должен быть в заголовке для istream, который я включил.

Для второй ошибки я просмотрел некоторые подобные вопросы и попытался использовать «->». Я обнаружил, что другая общая проблема заключалась в том, что переменная могла быть случайно объявлена ​​как функция, но я не думаю, что это так. Как я могу исправить эти ошибки и что их вызывает?

ответ

4

std::ifstream находится в заголовке fstream, который вы не указали. Добавьте #include <fstream> в свой заголовок или исходный файл.

+0

Спасибо! Я избавился от других включений и добавил fstream. Он строит сейчас! Как вы узнали, что это было в Fstream? Это даже не упоминается в http://www.cplusplus.com/reference/fstream/ifstream/, а http://www.cplusplus.com/reference/fstream/fstream/ - совершенно другое. Это несколько версий или что-то еще? – AAB

+2

@AABoucher Это, безусловно, ** ненадежный сайт, несмотря на высокий рейтинг Google. Рассмотрите http://en.cppreference.com/w/cpp/io/basic_fstream –

+0

@DrewDormann Спасибо, я этого никогда не знал. Это объясняет многое. – AAB