C++认为<<'不是班级成员,但它是
我必须编写一个简单的日志类,它将输出写入文件。
我希望它能够重载 <<运算符,所以我可以这样做:
MyLog log("C:\\log.txt");
log<<"Message";
但是 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);
};
MyLog.cpp
#include "MyLog.h"
MyLog::MyLog(char* filename)
{
logfile.open(filename);
}
MyLog& MyLog::operator<<(MyLog& l,char*msg)
{
cout<<msg;
return l;
}
有谁知道出了什么问题?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您已声明自由函数
MyLog&运算符 <<(MyLog& l,char* msg)
成为MyLog
类的friend
。它不是类本身的成员,因此函数的定义应以此开头:You have declared the free function
MyLog& operator<<(MyLog& l,char* msg)
to be afriend
of theMyLog
class. It is not a member of the class itself, so your definition of the function should start with this:Visual C++ 是对的,您的
operator<<
确实不是类MyLog
的成员。尝试将其设为成员函数而不是友元单独函数:Visual C++ is right, your
operator<<
is indeed not a member of classMyLog
. Try making it a member function instead of a friended separate function:您尝试输出 char* :
log<<"Message";
但只为 int 定义了运算符:
MyLog& MyLog::operator<<(MyLog& l,int i)
我猜错误消息还说“或者没有可接受的转换”
You try to output a char* :
log<<"Message";
But only defined your operator for int :
MyLog& MyLog::operator<<(MyLog& l,int i)
I guess the error message also says "or there is no acceptable conversion"
在这里,您声明了 int 的
<<
运算符,并且您尝试传递 char*。也尝试声明 char* 重载:
顺便说一下,为什么要将它声明为
friend
?Here you declared the
<<
operator for int, and you are trying to pass a char*.Try declaring the char* overload as well:
By the way, why are you declaring it as
friend
?尝试修改
为
Try modify
to
您已声明运算符<<作为非 MyLog 会员的朋友。这有效:
MyLog&运算符<<(MyLog&l,int i)
{
计算<
You've declared operator<< as a friend of not member of MyLog. This works:
MyLog& operator<<(MyLog& l,int i)
{
cout<