gpt4 book ai didi

C++ wifstream : Incompatible type char const*, wchar_t const*

转载 作者:太空狗 更新时间:2023-10-29 20:58:21 25 4
gpt4 key购买 nike

我正在学习 DirectX 3D 模型加载教程 here我正在测试一小部分代码。要加载我的 .obj 文件,我需要使用宽文件流,教程提示我需要传入宽字符串来初始化新流。

由于我希望将演示的串行实现转换为简洁的 OO 包,所以我与教程有一点偏差,但是当我收到 incompatible type char const* to wchar_t const* 错误时尝试初始化我的 file 变量以供读取

我该如何解决这个问题?

class Stream {
private:
std::wifstream file;
public:
bool open_file(std::wstring &filename) {
file = std::wifstream(filename.c_str()); // error thrown here.
}
};

从 main 中调用 open 函数。

std::wstring filename = "test_read.txt";
if(d.open_file(filename))
{
// Do read processing here
}

提前致谢。

最佳答案

首先,您正在尝试分配流,但您不能那样做。流不是容器,而是数据流。因此它们不能被复制或分配给。相反,您可以使用流对象的 open 成员函数:

class Stream {
private:
std::wifstream file;
public:
bool open_file(std::wstring &filename) {
file.open(filename.c_str());
}
};

然后我们回到文件名的问题。您正在阅读的教程错误The following overloads are available for all basic_ifstream instantiations :

void open( const char *filename,
ios_base::openmode mode = ios_base::in );
void open( const std::string &filename,
ios_base::openmode mode = ios_base::in );

也就是说,无论流的CharT如何,只有诚实的const char*std::string 应该被接受为文件名。

很有可能,本教程已根据 non-standard extensions provided by Microsoft's standard library implementation 做出假设,它添加了采用 const wchar_t* 的重载。如果您希望编写可移植代码,请忽略这些重载。

最后,您目前没有从 open_file 返回任何内容,这会导致未定义的行为。

您更正后的代码应如下所示:

class Stream {
private:
std::wifstream file;
public:
bool open_file(const std::string& filename) {
file.open(filename); // file.open(filename.c_str()) in C++03
return file.is_open();
}
};

关于C++ wifstream : Incompatible type char const*, wchar_t const*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27840813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com