`fopen` 和 QT(MinGW) 出错
Error with `fopen` and QT(MinGW)
我的 QT 应用程序中有以下代码:
FILE * file = fopen(m_fileName.c_str(), "rb");
,其中 m_fileName
的类型是 std::string
。
此代码在 Visual Studio2012 中运行良好。但是在 QT 4.7.4(MinGW 编译器)中,我的程序在这一行崩溃了。
我真的不知道这段代码有什么问题。我没怎么用过MinGW,肯定有不明白的地方。
更新:
来自 main.cpp
的代码:
std::string fileName = "test1.bmp";
m_pTexture1 = new Texture(GL_TEXTURE_2D, fileName);
if (!m_pTexture1->Load()) {
return;
}
Texture.cpp
的简化代码:
Texture::Texture(GLenum TextureTarget, std::string FileName)
{
m_textureTarget = TextureTarget;
m_fileName = FileName;
}
bool Texture::Load()
{
try {
FILE * file = fopen(m_fileName.c_str(),"rb");
}
catch (...) {
std::cout « "Error loading texture '" « m_fileName;
return false;
}
}
Texture.h
代码:
class Texture
{
public:
Texture(GLenum TextureTarget, std::string FileName);
bool Load();
private:
std::string m_fileName;
GLenum m_textureTarget;
GLuint m_textureObj;
unsigned int width, height;
unsigned char * data;
};
是的,@PaulMcKenzie 是对的。我试图在构造函数中打印 m_fileName
并且它破坏了程序。看起来 m_fileName
无法初始化。但是,我不知道为什么会这样。
更新 2
我发现它因为 printf
和其他 C i/o 函数而崩溃。很奇怪。
您的代码存在语法错误。 (括号)
FILE * file = fopen(m_fileName.c_str()), "rb");
^
this one
编译成功了吗?
我的 QT 应用程序中有以下代码:
FILE * file = fopen(m_fileName.c_str(), "rb");
,其中 m_fileName
的类型是 std::string
。
此代码在 Visual Studio2012 中运行良好。但是在 QT 4.7.4(MinGW 编译器)中,我的程序在这一行崩溃了。
我真的不知道这段代码有什么问题。我没怎么用过MinGW,肯定有不明白的地方。
更新:
来自 main.cpp
的代码:
std::string fileName = "test1.bmp";
m_pTexture1 = new Texture(GL_TEXTURE_2D, fileName);
if (!m_pTexture1->Load()) {
return;
}
Texture.cpp
的简化代码:
Texture::Texture(GLenum TextureTarget, std::string FileName)
{
m_textureTarget = TextureTarget;
m_fileName = FileName;
}
bool Texture::Load()
{
try {
FILE * file = fopen(m_fileName.c_str(),"rb");
}
catch (...) {
std::cout « "Error loading texture '" « m_fileName;
return false;
}
}
Texture.h
代码:
class Texture
{
public:
Texture(GLenum TextureTarget, std::string FileName);
bool Load();
private:
std::string m_fileName;
GLenum m_textureTarget;
GLuint m_textureObj;
unsigned int width, height;
unsigned char * data;
};
是的,@PaulMcKenzie 是对的。我试图在构造函数中打印 m_fileName
并且它破坏了程序。看起来 m_fileName
无法初始化。但是,我不知道为什么会这样。
更新 2
我发现它因为 printf
和其他 C i/o 函数而崩溃。很奇怪。
您的代码存在语法错误。 (括号)
FILE * file = fopen(m_fileName.c_str()), "rb");
^
this one
编译成功了吗?