我正在尝试将着色器文件加载器放入我的程序中。我正在复制“加载着色器”部分下的http://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/loading.php代码。我在下面有一个更简化的非工作版本。
我已经检查过我已经包含了网站上的示例所包含的所有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;
}
错误发生在“sfile.good()”的源文件中。 我不确定第一个错误,因为我不明白我是如何使用未定义类型的。我认为应该只使用ifstream。我没有看到我可以为“basic_istream”包含的头文件。根据{{3}},它应该在istream的标题中,我已经包含它。
对于第二个错误,我查看了一些类似的问题并尝试使用“ - &gt;”。我发现另一个常见问题是变量可能被意外地声明为函数,但我认为它也不是。我该如何解决这些错误,以及导致它们的原因?
答案 0 :(得分:4)
std::ifstream
位于您未包含的fstream
标题中。将#include <fstream>
添加到标头或源文件中。