我在这样的标题中编写了一个测试类:
File.h
#ifndef FILE_H
#define FILE_H
class File {
fstream stream;
public:
File(string path);
~File();
};
File::File(string path) {
stream.open(path);
}
File::~File() {
stream.close();
}
#endif // FILE_H
在另一个文件中,我像这样包含并使用它:
t.cpp
#include <iostream>
#include <string>
#include <fstream>
#include "/home/unlimiter/Documents/programming/modules/cpp/uio/File.h"
using namespace std;
int main(int argc, char *argv[]) {
File f("/home/unlimiter/tst");
}
为什么我这样做时会发生错误(例如未定义fstream)?
我测试了在't.cpp'中编写类,并且效果很好
答案 0 :(得分:5)
fstream
这样的东西。它的拼写为std::fstream
。std::string
相同。using namespace std
来告诉您解决此问题。 Don't(如果仅是因为您需要在标头中执行此操作,这被认为是不好的)。#include
放在需要它们的文件中,即标头本身。否则,您需要依靠一堆东西才能使它们中的任何一个起作用(这也被认为是不好的)。#include
指令中使用绝对路径:这会使您的源代码难以在您的计算机或其他计算机上移动。可以通过您的编译环境/ bulid系统更好地管理这种事情。.cpp
文件(或者可能是新的File.cpp
!),因为一旦将标头包含在多个翻译单元中,链接器就会抱怨关于多个定义。