我在头文件中尝试使用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的方式做些什么?
答案 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指令移动到标题中。