在C ++中重载Insertion运算符

时间:2009-11-11 01:18:20

标签: c++ class operator-overloading

我有一个课我正在尝试重载<<运营商。由于某种原因,它没有过载。

这是我的.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

4 个答案:

答案 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)

语法必须准确。