C++。如何从函数写入文件

Posted

技术标签:

【中文标题】C++。如何从函数写入文件【英文标题】:C++. How to write to file from function 【发布时间】:2014-12-20 10:19:22 【问题描述】:

我有函数必须在文件中写入一些东西。

我是这样尝试的:

int main() 
    std::ofstream fout;
    fout.open("OUTPUT.TXT");
    i = searchLexemes(input, i, 1, fout);

searchLexemes 是这样定义的:

int searchLexemes(std::string value, int i, int type, std::ofstream fout);

如果我像在 main() 中那样调用 searchLexemes,Visual Studio 会给我错误:

智能感知:“std::basic_ofstream<_elem _traits>::basic_ofstream(const std::basic_ofstream<_elem _traits>::_Myt &_Right) [с _Elem=char, _Traits=std::char_traits]" (объявлено в строке 1034 из "C:\Program Files\Microsoft Visual工作室 11.0\VC\include\fstream") недоступно c:\Users\Badina\Documents\Visual Studio 2012\Projects\PLT lab1\PLT lab1\Исходный код.cpp 191 33 PLT lab1

我用的是俄罗斯版的VS 2012,但我想问题一定很清楚。

【问题讨论】:

参考foutstd::ofstream&amp; fout 【参考方案1】:

使用reference 像这样声明您的函数:

int searchLexemes(const std::string& value, int i, int type, std::ofstream& fout);

出现此错误的原因是std::ofstream 没有公共复制构造函数(例如:ofstream(const ofstream&amp; rhs)),或者在 C++11 中明确标记为 deleted。

【讨论】:

【参考方案2】:

你应该调用 fout.open 函数,传入文件名。

但如果你真的想那么,

int searchLexemes(std::string value, int i, int type, std::ofstream *fout);
int main() 
    std::ofstream fout;
    fout.open("OUTPUT.TXT");
    i = searchLexemes(input, i, 1, &fout);

【讨论】:

指针是一种变量。你需要传入的是fout的地址,这就是你需要使用&的原因。您传入的这个地址只能被您的函数定义识别为指针类型变量。这样,当函数修改 fout 时,你的 main 中的那个就会改变。正如您告诉函数访问该内存一样。否则,当您正常传入一个变量时,该函数会为自己制作一个副本。 作为函数签名中的简单引用std::ofstream &amp;fout 也可以,并使searchLexemes() 的实现代码更易于编写和阅读。 投反对票,因为这里的代码存在内存泄漏(因为fout 不是deleted)。 @cybermonkey 废话,没有泄漏。 fout 从未使用 new 创建。如果您投反对票,请有正当理由。

以上是关于C++。如何从函数写入文件的主要内容,如果未能解决你的问题,请参考以下文章

c++文件怎么从文件中读出和写入字符串?

如何使用 C++ 中的函数将向量写入文件?

C++ 如何将一个文件里的数据写入到另一个文件里?

从文件 c++ 读取和写入的循环问题

C++ YAML:如何编辑/写入 .yaml 文件中的节点

如何使用 C++ 代码中的 BTRFS 写入时复制?