如果需要,创建一个流
Creating an ofstream if needed
如果这是一个完全愚蠢的问题,我很抱歉,但我还是遇到了麻烦。
我正试图将两个std::string fileNames
传递给函数foo
,如下所示:
foo(int SomeValue,std::string fileName1,std:;string fileName2)
然后我想检查它们是否都有一个比""
长的fileName,如下所示:
bool hasFile1 = true;
if(fileName1.empty())
{
hasFile1 = false;
}
我的问题一直存在,因为我希望能够在hasFile1 == true
的情况下创建ofstream
,而在hasFile2
的情况下也可以创建,这两个都应该稍后在函数foo
中可用。
我试过做一些事情,比如:
std::ofstream file1;
if(hasFile1)
{
file1 = new std::ofstream(fileName1);
}
但问题是file1是一个不完整的类型。我尝试的另一种方法是
std::ofstream* data;
if(hasFile1)
{
data = new std::ofstream(fileName1)/std::ofstream(fileName1);
}
并且所有的各种组合都给出了不允许的不完整类型错误或者我不能分配给指针。
问题的要点是如何分配ofstream
,这样就不需要维护3个代码块,这些代码块具有正在使用的ofstreams
的各种组合?
任何帮助都将不胜感激!!
"不完整类型"错误将是因为您没有包含<fstream>
来获得ofstream
的定义。
第一种方法不起作用,因为您正试图将指针(由new
返回)分配给对象。在大多数情况下,您会指定一个对象;但不幸的是,流是不可分配的,即使通过移动也是如此。
第二种方法是可行的(一旦定义了ofstream
),但这不是一个好主意,因为您现在有一个指向动态分配资源的原始指针。您很可能没有正确删除它,从而导致内存泄漏或其他问题。
这可以通过使用智能指针而不是原始指针来减轻;但在ofstream
的情况下,如果没有文件打开,可以简单地将其关闭:
std::ofstream file1;
if(hasFile1) {
file1.open(fileName1);
}
此外,请注意您没有正确初始化hasFile1
;并且您通常不能使用==
来比较C样式字符串。你想要更像的东西
bool hasFile1 = (fileName1[0] != ' ');
或者,如果将文件名参数更改为更友好的std::string
bool hasFile1 = !fileName1.empty();
当您将字符串作为指针传递时,您会尝试将它们与另一个指针(文本""
)进行比较,该指针永远不会为真(当然,除非您传递字符串文本""
和,编译器只保留该特定字符串文本的一个副本,以便共享指向该文本的指针)。
对字符串使用std::string
,或者如果您想要旧的C样式字符串指针,请使用std::strlen
来检查空字符串。
在if(fileName1 == "")
中比较const char*
可能无法达到预期效果。它比较两个const char*
指针,而不是它们的值。使用strlen()
(检查零)或strcmp()
来比较C字符串。
你包括fstream
吗?
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何创建一个空的全局类并在启动时实例化它
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 在c++中为double类型的数组创建一个unique_ptr
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何从这些语句中的每一个创建不同的函数?
- 给定一个创建的带有货物的链表,我需要使用函数检查实际序列或"train"是否有效
- 一个创建彩票游戏的程序,该彩票游戏可以有效地创建 10 套而没有任何重复?
- 如何实现一个创建新对象并返回对它的引用的C++方法
- 如何成功创建一个创建对象并返回指向该对象的指针的函数