LNK2019输出运算符过载时出错

LNK2019 Error on overloaded output operator

本文关键字:出错 输出 运算符 LNK2019      更新时间:2023-10-16

我从这段代码中得到以下错误:错误1错误LNK2019:未解析的外部符号"class std::basic_stream>&__cdecl运算符<<(class std::basic_stream>>,class Point const&)"(??6@YAAAV$basic_ostream@DU$char_traits@D@std@@@std@@AAV01@ABV$Point@N@@@Z) 在函数_main G:\C++Part II\ Final Exam\Point\Point\Source.obj Point 中引用

我知道这个错误通常意味着我没有定义函数,但它是定义好的。如果我主要注释掉cout语句,程序就会编译。我猜我的模板名称遗漏了什么?

#include <iostream>
using namespace std;
template <class T>
class Point{
private:
T x, y;
public:
Point(): x(0), y(0) {cout << "Default Constructorn";};
Point(T a, T b): x(a), y(b) {cout << "Parameterized Constructorn";};
Point(const Point &rhs);
~Point() {cout << "Destructorn";};
friend ostream &operator<<(ostream &os, const Point<T> &X);
};
int main(){
Point <double> B;
cout << B << endl;
return 0;
}
template <class T>
Point<T>::Point(const Point &rhs)
{
x = rhs.x;
y = rhs.y;
cout << "Copy Constructorn";
}
template <class T>
ostream &operator<<(ostream &os, const Point<T> &X)
{
os << "(" << X.x << ", " << X.y << ")";
return os;
}

您在类中声明为友元的函数实际上与您实现的函数不同。这是一个模板化的函数,声明需要反映这一点:

template <class T> friend ostream &operator<<(ostream &os, const Point<T> &X);