我遇到朋友功能问题。
我认为这是所需代码的唯一部分..我的问题是这个功能。它说问题出在第一行,但我不知道它是多么准确。
friend ostream & operator << (ostream & b, Book & a)
{
b.setf(ios::fixed | ios::showpoint);
b.precision(2);
b << "Title : \"" << a.title << "\"\n"
<< "Author : \"" << a.author << "\"\n"
<< "Price : $" << a.price / 100.0 << endl
<< "Genre : " <<a.genre << endl
<< "In stock? " << (a.status ? "yes" : "no") << endl
<< endl;
return b;
}
我收到错误: lab10.cpp:95:错误:无法初始化好友函数âoperator&lt;&lt;â
lab10.cpp:95:错误:朋友声明不在课程定义中
提前致谢
答案 0 :(得分:1)
你在课堂上有朋友功能原型吗?你需要在类中有一些东西,表明这是一个友方函数。喜欢这条线
friend ostream& operator<<(...);
或者其他什么。查找一个完整的示例,用于重载插入/提取操作符以获取更多信息。
答案 1 :(得分:1)
你必须指定函数是哪个类的朋友。您可以将该函数放在类声明中:
class Book{
...
friend ostream & operator << (ostream & b, Book & a)
{
b.setf(ios::fixed | ios::showpoint);
b.precision(2);
b << "Title : \"" << a.title << "\"\n"
<< "Author : \"" << a.author << "\"\n"
<< "Price : $" << a.price / 100.0 << endl
<< "Genre : " <<a.genre << endl
<< "In stock? " << (a.status ? "yes" : "no") << endl
<< endl;
return b;
}
};
另一种方法是将它声明为类中的朋友,并在其他地方定义它:
class Book{
...
friend ostream & operator << (ostream & b, Book & a);
};
...
// Notice, there is no "friend" in definition!
ostream & operator << (ostream & b, Book & a)
{
b.setf(ios::fixed | ios::showpoint);
b.precision(2);
b << "Title : \"" << a.title << "\"\n"
<< "Author : \"" << a.author << "\"\n"
<< "Price : $" << a.price / 100.0 << endl
<< "Genre : " <<a.genre << endl
<< "In stock? " << (a.status ? "yes" : "no") << endl
<< endl;
return b;
}
答案 2 :(得分:0)
#include <iostream>
#include <string>
using namespace std;
class Samp
{
public:
int ID;
string strName;
friend std::ostream& operator<<(std::ostream &os, const Samp& obj);
};
std::ostream& operator<<(std::ostream &os, const Samp& obj)
{
os << obj.ID<< “ ” << obj.strName;
return os;
}
int main()
{
Samp obj, obj1;
obj.ID = 100;
obj.strName = "Hello";
obj1=obj;
cout << obj <<endl<< obj1;
}
输出: 你好 你好 按任意键继续......
这可以是友元函数,因为该对象位于&lt;&lt;&lt;&lt;运算符和参数cout在lhs上。所以这不能成为班级的成员函数,它只能是朋友的功能。