来自'std :: string(*)(std :: ofstream&,const string&,std :: string,int的无效转换

鱼鞋

我在这里编写了一个文件读取器/写入器,其代码仍未完成。

#include <iostream>
#include <fstream>
#include <string>

const std::string path_to_data = "\\data";
const std::string level_file = path_to_data+"\\level_file.lev";



typedef std::string (*f_read)(std::ifstream& fin,const std::string& level_file,int    line_num);
typedef std::string (*f_write)(std::ofstream& fout,const std::string& level_file,   std::string& what_to_write,int line_num);
typedef std::string (*pt_f_manger)(f_read,f_write);



inline bool is_empty(std::ifstream& pFile){return pFile.peek() ==     std::ifstream::traits_type::eof();}
std::string file_manger(f_read,f_write);
std::string read_file(std::ifstream& fin,const std::string& level_file,int line_num);
std::string write_file(std::ofstream& fout,const std::string& level_file,std::string what_to_write, int line_num);
std::string error_handler(std::string error_type,pt_f_manger f_manger);


int main()
{
std::string error = file_manger(read_file,write_file);
std::cout<<error<<"\n";
std::cin.get();
std::cin.get();
return 0;
}

std::string file_manger(f_read f_input,f_write f_output)
{
std::string good = "good";
std::string error = "error";
std::ifstream fin;
std::ofstream fout;
std::string test = "test";
std::string output = f_output(fout,level_file,test,0);
std::string input = f_input(fin,level_file,0);
if (output != "good")
    return error;
if (input != "good")
    return error;

return good;
 }

 std::string write_file(std::ofstream& fout,const std::string& level_file, std::string&  what_to_write,int line_num)
 {
const char* level_filec = level_file.c_str();
std::ifstream fin;
fin.open(level_filec);
if (fin.is_open())
    return "failed to open "+level_file;

if (is_empty(fin))
{
    fin.close();
    fout.open(level_filec);
    if (!fout.is_open())
        return "failed to open "+level_file;

    fout<<what_to_write;
    fout.close();
    return "good";
}
int i = 0;
int num = 0;
char ch;
while (fin.good() && i != line_num)
{
    fin.get(ch);
    if (ch == '\n')
        ++num;
    ++i;
}
int pos = fin.tellg();
fin.close();
fout.open(level_filec,std::ios_base::in);
if (!fout.is_open())
    return "failed to open "+level_file;
fout.seekp(pos);
fout<<what_to_write;
fout.close();
return "good";
  }

  std::string read_file(std::ifstream& fin,const std::string& level_file,int line_num)
  {
   const char* level_filec = level_file.c_str();
std::string read;
fin.open(level_filec);
if (fin.is_open())
    return "failed to open "+level_file;

if (is_empty(fin))
{
    fin.close();
    return "file is empty";
}
int i = 0;
int num = 0;
char ch;
while (fin.good() && i != line_num)
{
    fin.get(ch);
    if (ch == '\n')
        ++num;
    ++i;
}
std::getline(fin,read);
return read;
    }

    std::string error_handler(std::string error_type,pt_f_manger f_manger)//work in progress
    {
return "good";
    }

我得到这个错误

C:\ Users \ john \ Documents \ main.cpp ||在函数“ int main()”中:| C:\ Users \ john \ Documents \ main.cpp | 25 |错误:从'std :: string(*)(std :: ofstream&,const string&,std :: string,int)的无效转换{aka std :: basic_string (*)(std :: basic_ofstream&,const std :: basic_string&,std :: basic_string,int)}'到'f_write {aka std :: basic_string(*)(std :: basic_ofstream&,const std :: basic_string&,std: :basic_string&,int)}'[-fpermissive] | C:\ Users \ john \ Documents \ main.cpp | 17 |错误:初始化'std :: string file_manger(f_read,f_write)'的参数2 [-fpermissive] | || ===构建完成:2个错误,0个警告(0分钟,0秒)=== |

即时通讯使用code :: blocks。

伊戈尔垃圾
typedef std::string (*f_write)(
  std::ofstream& fout, const std::string& level_file,
  std::string& what_to_write, int line_num);

std::string write_file(
  std::ofstream& fout, const std::string& level_file,
  std::string what_to_write, int line_num);

你能发现区别吗?(提示:比较第三个参数的类型)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++ const char *转换为std :: string&

防止函数接受const std :: string&接受0

期望const std :: string&的函数的链接器错误

从类方法返回“ const char *”作为std :: string&

std :: string_view比const std :: string&到底有多快?

如何解决“std::basic_ofstream<char, std::char_traits<char> >::open(std::string&)”

没有可变参数调用std :: forward(const std :: string&)的匹配函数

无名char []到std :: string&引用

如何将 const char& 转换为 const std::string&?

一个关于c++语法的问题[static const auto compare = [](const std::string& now, const std::string& next) noexcept ->bool ]

没有匹配的函数可以调用`std :: basic_ofstream <char,std :: char_traits <char>> :: basic_ofstream(std :: string&)

为什么编译器更喜欢f(const void *)而不是f(const std :: string&)?

使用 const string& 构造函数和模板化 std::set find 出现分段错误

将const std :: string&作为参数传递的日子已经过去了吗?

在C ++ 17中使用const std :: string&参数是否有意义?

'const std::string&' 后面的变量参数列表弄乱了堆栈

无法从“ const std :: string [3]”转换为“ std :: string”

std :: unordered_map <std :: string,std :: function <void(std :: string&)是否只能容纳静态函数?

C ++-来自std :: string的意外输出

从std :: map <std :: basic_string <char>,std :: pair <int,int(*)(const std :: vector :: Mat

SWIG:如何包装std :: string&(std :: string通过引用传递)

为什么可以将 std::string& 分配给 c++ 中的 std::string 变量?

为什么 g++ 不关心初始化列表分配给 (const std::string&) a (std::string)?和其他怪事

std :: string和const char *

为什么这个编译错误?-没有匹配的函数可以调用'std :: basic_ofstream <char> :: open(std :: string&)'

将std :: string转换为const tchar *

“const std::string &getStr” vs “std::string getStr”

为什么将const std :: string&传递给构造函数不允许您将其绑定到初始化程序列表中的const std :: string&成员变量?

std :: ofstream无法将std :: string写入文件