我不明白这个神秘的错误信息,但我得到了 30 个
`'value_type' : is not a member of 'TextFileLineBuffer'`
当我在 VC++ 6 中编译以下代码//***
且未注释行时。
当然,如果我把它注释掉,它编译得很好。
我想我在过去的两个小时里尝试了各种尝试都是徒劳的。任何提示将不胜感激。
#include <list>
#include <string>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
//wrapper for a string line
struct TextLine
{
std::string m_sLineContent;
operator std::string const& () const { return m_sLineContent; }
friend std::istream& operator>>(std::istream& stream, TextLine& line)
{
return std::getline(stream, line.m_sLineContent);
}
};
//this is a version of fixed size of string queue for easy text file reading
class TextFileLineBuffer
{
public:
TextFileLineBuffer(size_t lc, const char* fileName)
: m_iLineCount(lc), m_sFileName(fileName)
{
std::ifstream file(fileName);
//*** std::copy(std::istream_iterator<TextLine>(file),
//*** std::istream_iterator<TextLine>(),
//*** std::back_inserter(*this));
}
void push_back(std::string const& line)
{
m_sBuffer.insert(m_sBuffer.end(),line);
if (m_sBuffer.size() > m_iLineCount)
{
m_sBuffer.erase(m_sBuffer.begin());
}
}
const char* c_str() const
{
std::string returnValue("");
for (const_iterator it = begin(); it != end(); ++it)
{
returnValue = returnValue + *it;
}
return returnValue.c_str();
}
typedef std::list<std::string> Container;
typedef Container::const_iterator const_iterator;
typedef Container::const_reference const_reference;
const_iterator begin() const { return m_sBuffer.begin(); }
const_iterator end() const { return m_sBuffer.end();}
private:
size_t m_iLineCount;
std::list<std::string> m_sBuffer;
std::string m_sFileName;
};