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::string
1 以便 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)作为类成员变量的初始化方式