使用带标题的文件

时间:2018-03-30 03:22:58

标签: c++ file class c++11

我在头文件中尝试使用ifstream时遇到错误。他们说:

FloatList.h:14:15: error: 'ifstream' has not been declared
void getList(ifstream&);
FloatList.cpp:16:6: error: prototype for 'void FloatList::getList(std::ifstream&)'
FloatList.h:14:7: error: candidate is: void FloatList::getList(int&)
void getList(ifstream&);

以下是my.h文件中的问题部分:

public:
    FloatList();                // constructor that sets length to 0.
    ~FloatList();               // destructor
    void getList(ifstream&);    // Member function that gets data from a file 
    void printList() const;     // Member function that prints data from that
                            // file to the screen.

};
#endif

这是我的成员函数实现文件:

#include "FloatList.h"
#include <iostream>
#include <fstream>
using namespace std;

// Fill in the entire code for the getList function
// The getList function reads the data values from a data file
// into the values array of the class FloatList
void FloatList::getList(ifstream& file)
{
    for(int i = 0; i < MAX_LENGTH; i++)
    {
        if(file >> values[i])
            length++;
    }
}

是否必须对我在头文件中使用ifstream的方式做些什么?

2 个答案:

答案 0 :(得分:0)

由于您在.cpp文件中仅声明using namespace std ,因此您有义务在ifstream的头文件中为std::名称添加前缀。

答案 1 :(得分:0)

您无法安全地从std转发声明模板,因此您自己的选择是在声明您的类之前包含标题。方法的原型要求: 预处理器完成包含后的代码排序应该是这样的:

#include <iostream>
#include <fstream>
class FloatList
{
public:
    FloatList();                // constructor that sets length to 0.
    ~FloatList();               // destructor
    void getList(std::ifstream&);    // Member function that gets data from a file 
    void printList() const;     // Member function that prints data from that
                            // file to the screen.

};

void FloatList::getList(std::ifstream& file)
{
    for(int i = 0; i < MAX_LENGTH; i++)
    {
        if(file >> values[i])
            length++;
    }
}

您可以在.cpp文件中重新排序标头:

#include <iostream>
#include <fstream>
#include "FloatList.h"

因此,使用FloatList.h将需要这些标头。另一个选择是将include指令移动到标题中。