你好我在c ++中有这样的代码:
#include <iostream>
using namespace std;
namespace exercises
{
class String;
ostream& operator<<(ostream&, const String&);
istream& operator>>(istream&, String&);
class String
{
public:
explicit String(const char* str_="");
~String();
String(String const &oStr_);
String& operator=(const String& oStr_);
String& operator=(const char* oStr_);
bool operator==(const String& oStr_)const;
bool operator<(const String& oStr_)const;
bool operator>(const String& oStr_)const;
char operator[](std::size_t)const;
char& operator[](std::size_t);
const std::size_t Len()const;
const char* CStr()const;
private:
char* m_str;
};
}
但我不知道一件事。我可以在这个代码头文件中设置所有函数(带有源代码),它完全可以工作,所以当人们可以设置头文件中的所有源并只包含头文件并享受它时,为什么人们使用.lib文件?我知道一件事:头文件用于声明而.cpp用于源代码,因为如果你在头文件中设置source你可能会得到一些未定义的错误(但我没有)因此,重要的是我在cpp中设置我的soruces文件或只是我可以使用头文件来源?
答案 0 :(得分:0)
你不能多次定义相同的函数/类,因此它可能不会给你一个编译错误,因为你只包含一次标题,但是如果你将它再次包含在另一个标题中它会给你您的类/函数已定义的错误。必须在头文件中定义模板化的类或函数,编译器将通过proccess运行,它将填充所有使用过的模板参数。