不能做运算符 << 重载
Cannot do operator << overloading
我刚开始学习 CPP,但遇到运算符重载问题。
我想重载 ostream 库中的“<<”运算符。
这是我在头文件中的声明:
friend ostream& operator<<(ostream &out ,const Stone s);
这就是 cpp 文件:
ostream& Stone:: operator<<( ostream &out , const Stone s ){
给出的错误是:
1 IntelliSense: class "Stone" 没有成员 "operator<<"
我做错了什么?
问题是你的cpp文件
std::ostream& Stone::operator<<(std::ostream& stream, const Stone s)
^^^^^
{
}
它不是成员函数,应该是:
// Also note the 2nd argument is `const &` (i.e., don't copy the object if you don't have to
std::ostream& operator<<(std::ostream& stream, const Stone& foo)
{
}
完整示例
如果您仍然遇到问题,您应该 post 更多代码 and/or 您的错误。以下对我有用。
#include <iostream>
class Foo
{
public:
Foo() : mValue(99) {}
friend std::ostream& operator<<(std::ostream& stream, const Foo& foo);
private:
int mValue;
};
std::ostream& operator<<(std::ostream& stream, const Foo& foo)
{
return stream << foo.mValue;
}
int main()
{
Foo f;
std::cout << f << "\n";
return 0;
}
在头文件中,友元声明需要在classStone
.
的定义内
在源文件(你称之为"cpp")文件中,头文件需要在尝试define/implement operator<<()
.
之前包含
朋友不是会员,因此不应在前面加上 Stone::
。
其他一些细节。
永远不要在头文件中使用 using namespace std
因为它会导致
难以恢复的歧义。姓名 ostream
完整(即 std::ostream
)。
operator<<()
的第二个参数通常最好作为
const
引用,不按值传递。
我刚开始学习 CPP,但遇到运算符重载问题。 我想重载 ostream 库中的“<<”运算符。 这是我在头文件中的声明:
friend ostream& operator<<(ostream &out ,const Stone s);
这就是 cpp 文件:
ostream& Stone:: operator<<( ostream &out , const Stone s ){
给出的错误是: 1 IntelliSense: class "Stone" 没有成员 "operator<<"
我做错了什么?
问题是你的cpp文件
std::ostream& Stone::operator<<(std::ostream& stream, const Stone s)
^^^^^
{
}
它不是成员函数,应该是:
// Also note the 2nd argument is `const &` (i.e., don't copy the object if you don't have to
std::ostream& operator<<(std::ostream& stream, const Stone& foo)
{
}
完整示例
如果您仍然遇到问题,您应该 post 更多代码 and/or 您的错误。以下对我有用。
#include <iostream>
class Foo
{
public:
Foo() : mValue(99) {}
friend std::ostream& operator<<(std::ostream& stream, const Foo& foo);
private:
int mValue;
};
std::ostream& operator<<(std::ostream& stream, const Foo& foo)
{
return stream << foo.mValue;
}
int main()
{
Foo f;
std::cout << f << "\n";
return 0;
}
在头文件中,友元声明需要在classStone
.
在源文件(你称之为"cpp")文件中,头文件需要在尝试define/implement operator<<()
.
朋友不是会员,因此不应在前面加上 Stone::
。
其他一些细节。
永远不要在头文件中使用
using namespace std
因为它会导致 难以恢复的歧义。姓名ostream
完整(即std::ostream
)。operator<<()
的第二个参数通常最好作为
const
引用,不按值传递。