我有一个课我正在尝试重载<<运营商。由于某种原因,它没有过载。
这是我的.h文件:
friend std::ostream& operator<<(std::ostream&, const course &); //course is my class object name
在我的.cpp中,我将此作为我的实现:
std::ostream& operator<<(std::ostream &out, const course & rhs){
out << rhs.info;
return out;
}
这应该是正确的,但是当我尝试编译它时,它会说cout&lt;&lt; TMP;没有在ostream中定义。
我在我的.cpp和.h
中加入了iostream我一直在试着想出这个问题。你能看到任何与此有关的错误吗?
编辑: 由于我所做的似乎是正确的,这里是我的所有源代码:http://pastebin.com/f5b523770
第46行是我的原型
第377行是实施
第435行是我尝试编译时失败的地方。
另外,我只是尝试在另一台机器上编译它,它反而给出了这个错误:
course.cpp:246: error: non-member function 'std::ostream& operator<<(std::ostream&, const course&)' cannot have cv-qualifier
make: *** [course.o] Error 1
答案 0 :(得分:3)
您列出的语法是正确的,但必须在课程定义中声明重载的运算符原型才能正常工作。
<强> course.h 强>
class course {
public:
friend std::ostream& operator<<(std::ostream&, const course&);
private:
int info;
}
<强> course.cpp 强>
std::ostream& operator<<(std::ostream &out, const course &rhs){
out << rhs.info;
return out;
}
答案 1 :(得分:1)
您应该包含其余代码,我认为我们无法看到问题所在。
以下简单示例有效:
class course
{
public:
course(int info) : info(info) { }
int info;
friend std::ostream& operator<<(std::ostream&, const course &);
};
std::ostream& operator<<(std::ostream &out, const course & rhs)
{
out << rhs.info;
return out;
}
int main(int, char*[])
{
course tmp(3);
std::cout << tmp;
return 0;
}
答案 2 :(得分:1)
对我来说很好看。这是我的版本:
<强> course.h 强>
#include <iostream>
class course
{
public:
friend std::ostream& operator<<(std::ostream&, const course &); //course is my class object name
int info;
course(){info = 10;}
};
<强> course.cpp 强>
#include <iostream>
#include "course.h"
std::ostream& operator<<(std::ostream &out, const course & rhs)
{
out << rhs.info;
return out;
}
<强> main_file.cpp 强>
#include <iostream>
#include "course.h"
int main()
{
course a;
std::cout<<a;
return 0;
}
答案 3 :(得分:0)
我觉得这很有用!
我的插入和提取操作符略有不同。
这里定义了它们:
朋友ostream&amp; operator&lt;&lt;(ostream&amp; fout,datatype toPrint)朋友istream&amp;运算符&gt;&gt;(istream&amp; fin,数据类型&amp; toReadTo)
语法必须准确。