C++认为'<<'不是类的成员,但它是

Ove*_*Ove 3 c++ operator-overloading

我必须编写一个简单的日志类,将输出写入文件.

我希望它能够重载<<运算符,所以我可以这样做:

MyLog log("C:\\log.txt");
log<<"Message";
Run Code Online (Sandbox Code Playgroud)

但Visual C++告诉我:"错误C2039:'<<':不是'MyLog'的成员"

我不知道我做错了什么.

这是代码:

MyLog.h

#pragma once
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;

class MyLog
{
private:
    ofstream logfile;
public:
    MyLog(char* filename);
    friend MyLog& operator<<(MyLog& l,char*msg);
};
Run Code Online (Sandbox Code Playgroud)

MyLog.cpp

#include "MyLog.h"

MyLog::MyLog(char* filename)
{
    logfile.open(filename);
}

MyLog& MyLog::operator<<(MyLog& l,char*msg)
{
    cout<<msg;
    return l;
}
Run Code Online (Sandbox Code Playgroud)

有谁知道什么是错的?

CB *_*ley 19

你已经宣布免费功能MyLog& operator<<(MyLog& l,char* msg)成为friend了的MyLog类.它不是类本身的成员,所以你的函数定义应该从这开始:

MyLog& operator<<(MyLog& l,char* msg)
{
   //...
Run Code Online (Sandbox Code Playgroud)

  • @Totonga:作为一般规则,二元运算符作为自由函数更好,因为它允许在表达式的"第一"操作数不是类类型的情况下找到它们.对于日志类,不太可能出现这种情况,但是,为了保证样式的一致性,以这种方式实现它并不是一件坏事. (4认同)