Ofstream,使用变量来命名

Posted

技术标签:

【中文标题】Ofstream,使用变量来命名【英文标题】:Ofstream, use variable to the name 【发布时间】:2012-02-27 19:23:21 【问题描述】:

大家好...

对不起我的英语,但说西班牙语......

这周,为这个项目学习和工作,我想创建一个软件来制作文件(.us)......

示例

char name[50]; //Or string
cin>>name;

ofstream PlayerPawn("D:\\UDK\\UDK_XXX\\Development\\Src\\" + name+"\\Classes\\_PlayerPawn.us");

但是编译器在Operator binary plus

中有错误

在特定目录中创建文件的任何替代方案、示例或其他内容

再见,谢谢!

【问题讨论】:

【参考方案1】:

operator+ 的任一侧必须是 std::string1 以便 operator+ 连接字符串:

string name;
cin >> name;

ofstream PlayerPawn("D:\\UDK\\UDK_XXX\\Development\\Src\\" + name + "\\Classes\\_PlayerPawn.us");

并使用std::string 来处理这些东西;使用 std::string 不会像使用 char* 那样出现缓冲区溢出的危险。


1其实它只需要是一个支持operator+的类类型,而不是具体的std::string,但是你不知道它会做什么。

【讨论】:

但是,将变量更改为 std::string 但出现此错误...D:\Users\Warkanlock\Documents\Code Blocks\UDK_ProyectSimple\main.cpp|20|error: no matching function for call to 'std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'| @Warkanlock 确保将 #include <string> 放在代码的顶部。 @Warkanlock 您的错误来自您使用std::ofstream 的其他地方。您需要粘贴其余代码。 @Warkanlock ofstream 的构造函数采用const char*,而不是string。将"..." + nombre + "..." 放在括号中,然后在括号结束后调用字符串上的c_str。像这样:ofstream PlayerPawn(("D:\\UDK\\UDK_XXX\\Development\\Src\\" + nombre + "\\Classes\\_PlayerPawn.us").c_str()); 这里是另一个 Stack Overflow question 关于这个奇怪的东西。很好的赛斯。【参考方案2】:

我相信您希望 name 成为 std::string - 否则,name + [suffix] 将尝试将后缀字符串添加到数组中并且不会编译。如果您确实想将名称保留为数组,则应使用strcat 将字符串附加在一起。

【讨论】:

但是,将 de Variable 更改为 String 并且有同样的错误! D:\Users\Warkanlock\Documents\Code Blocks\UDK_ProyectSimple\main.cpp|20|error: no matching function for call to 'std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'| 嗯,这不是同一个错误 - 你需要#include <iostream> 来定义什么是“ofstream” 是的,这个包含在这个文件中:o 在@Seth Carnegie 的回答末尾查看我的评论

以上是关于Ofstream,使用变量来命名的主要内容,如果未能解决你的问题,请参考以下文章

文件流(fstream/ifstream/ofstream)作为类成员变量的初始化方式

使用 ofstream 写入 txt 文件时强制编码

使用 ofstream 时“表达式必须具有常量值”

Tensorboard数据(tfevents文件)格式解析及ofstream使用问题

std::ofstream,写入前检查文件是不是存在

std::ofstream,写入前检查文件是不是存在