错误 LNK2019 无法解析的外部符号 “operator<<(ostream&, const Square&)“,函数main中引用了该符号
程序员文章站
2022-06-09 15:59:27
...
1 报错现象
1.1报错全文为:
1.2一般这种报错与是否在正确的位置使用inline有关,
1.2.1operator<<(ostream&, const Square&)的声明位置如下:
(即放在头文件的类Square的定义下方)
//.h
class Square {
public:
explicit Square(double s =0.0):side(s){}
double getside()const { return side; }
double getArea()const { return side * side; }
double getPerimeter()const { return 4 * side; }
void print(ostream&out = cout)const
{out<<"(square"<<getside()<<")"<<endl;}
bool operator<(const Square& rhs)const
{return getside()<rhs.getside();}
private:
double side;
};
ostream& operator<<(ostream& out, const Square& rhs);
1.2.2 operator<<(ostream&, const Square&)的定义放在与头文件同名
的源文件中,定义如下:
//.cpp
//<<
inline ostream& operator<<(ostream& out, const Square& rhs)
{
rhs.print(out);
return out;
}
1.2.3 按上述放置<<的声明与定义就会报LNK2019错误。
2 修正
(1)直接将定义放置在类Square的定义下方,且声明为inline。
(2)如下:
//.h
class Square {
public:
explicit Square(double s =0.0):side(s){}
double getside()const { return side; }
double getArea()const { return side * side; }
double getPerimeter()const { return 4 * side; }
void print(ostream&out = cout)const
{out<<"(square"<<getside()<<")"<<endl;}
bool operator<(const Square& rhs)const
{return getside()<rhs.getside();}
private:
double side;
};
//<<
inline ostream& operator<<(ostream& out, const Square& rhs)
{
rhs.print(out);
return out;
}
(3)如此,即不会再报错了。
上一篇: Openwrt架设GIT服务
下一篇: 引用provinces.js的三级联动