gpt4 book ai didi

c++ - 文件 I/O 错误 Copy Constructor C++

转载 作者:搜寻专家 更新时间:2023-10-31 00:59:25 25 4
gpt4 key购买 nike

我正在尝试用一些简单的方法制作一个程序,这是我的类(class)之一:

例子.cpp:

#include "Example.hpp"

using namespace std;

ifstream Example::getStream(const char *inputFile) const {
ifstream myFile;
myFile.open(inputFile);
return myFile;
}

例子.hpp:

#include <fstream>
#include <map>

#ifndef EXAMPLE_HPP
#define EXAMPLE_HPP

using namespace std;

class Example {
public:
map<int, int> *exampleMap;

ifstream getStream(const char *inputFile) const;
};

#endif

这个是程序中其他子类实现的,以后用处很大。但是,就目前而言,当我尝试构建它时,它会返回以下错误:

In file included from /usr/include/c++/4.8/ios:42:0,
from /usr/include/c++/4.8/istream:38,
from /usr/include/c++/4.8/fstream:38,
from ../Example.hpp:1,
from ../Example.cpp:1:
/usr/include/c++/4.8/bits/ios_base.h: In copy constructor ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’:
/usr/include/c++/4.8/bits/ios_base.h:786:5: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
ios_base(const ios_base&);
^
In file included from /usr/include/c++/4.8/ios:44:0,
from /usr/include/c++/4.8/istream:38,
from /usr/include/c++/4.8/fstream:38,
from ../Example.hpp:1,
from ../Example.cpp:1:
/usr/include/c++/4.8/bits/basic_ios.h:66:11: error: within this context
class basic_ios : public ios_base
^
In file included from ../Example.hpp:1:0,
from ../Example.cpp:1:
/usr/include/c++/4.8/fstream: In copy constructor ‘std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)’:
/usr/include/c++/4.8/fstream:427:11: note: synthesized method ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’ first required here
class basic_ifstream : public basic_istream<_CharT, _Traits>
^
In file included from /usr/include/c++/4.8/ios:43:0,
from /usr/include/c++/4.8/istream:38,
from /usr/include/c++/4.8/fstream:38,
from ../Example.hpp:1,
from ../Example.cpp:1:
/usr/include/c++/4.8/streambuf: In copy constructor ‘std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)’:
/usr/include/c++/4.8/streambuf:802:7: error: ‘std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]’ is private
basic_streambuf(const basic_streambuf& __sb)
^
In file included from ../Example.hpp:1:0,
from ../Example.cpp:1:
/usr/include/c++/4.8/fstream:72:11: error: within this context
class basic_filebuf : public basic_streambuf<_CharT, _Traits>
^
/usr/include/c++/4.8/fstream: In copy constructor ‘std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)’:
/usr/include/c++/4.8/fstream:427:11: note: synthesized method ‘std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)’ first required here
class basic_ifstream : public basic_istream<_CharT, _Traits>
^
../Example.cpp: In member function ‘std::ifstream Example::getStream(const char*) const’:
../Example.cpp:13:12: note: synthesized method ‘std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)’ first required here
return myFile;
^
make: *** [Example.o] Error 1

我想弄清楚我在这里做错了什么。它与包含有关吗?是我看不到的错字吗?

提前致谢。

最佳答案

您正在尝试按值 返回流。这在 C++11 之前(以及 gcc 4.X 的标准库实现)是不可能的,因为无法复制流并且 C++98 没有移动语义。

所以在 C++11 中,这段代码没问题;如果你的实现还没有完全实现它,你需要一个变通方法,比如传入一个非 const 引用,例如:

#ifndef EXAMPLE_HPP
#define EXAMPLE_HPP

#include <fstream>
#include <map>

class Example
{
public:
std::map<int, int> *exampleMap;

bool openFile(const char *inputFile, std::ifstream &myFile) const;
};

#endif

#include "Example.hpp"

bool Example::openFile(const char *inputFile, std::ifstream &s) const
{
myFile.open(inputFile);
return myFile.is_open();
}

#include "Example.hpp"

Example ex;
std::ifstream myFile;

if (ex.openFile("filename", myFile))
{
//...
}

关于c++ - 文件 I/O 错误 Copy Constructor C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33358003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com