首页 > 解决方案 > 组合:作为类成员的对象

问题描述

我正在使用组合的概念编写代码:对象作为类的成员,这个错误出现在我身上:[错误]与'操作员<<'不匹配。任何人都可以帮助我吗?当我尝试包含 trabalhador.h 和 trabalhador.cpp 文件时,错误开始出现。如果我尝试在没有这两个文件的情况下编译代码,它可以工作,但我需要 both,因为我试图自己实现这个概念。

这是代码:


//main

#include <iostream>
using std::cout;

#include "trabalhador.h"

int main()
{
    cout << "INFORME OS DADOS SOLICITADOS: \n\n";

    cout << "Nome do funcionario: ";

    info i1;

    cout << "CPF: ";

    info i2;

    trabalhador t(i1, i2);
    
    return 0;
}

//trabalhador.h

#ifndef TRABALHADOR_H

#define TRABALHADOR_H

#include "info.h"

class trabalhador

{

    public:

        trabalhador (const info &, const info &);

        void print () const;

    private:

        const info funcionarioNome;

        const info funcionarioCPF;

};

#endif

//trabalhador.cpp

#include <iostream>

using std::cout;

#include "trabalhador.h"

#include "info.h"

trabalhador::trabalhador (const info &infoNome, const info &infoCPF)

:funcionarioNome (infoNome),

funcionarioCPF (infoCPF)

{

    cout << "Dados do funcionario: ";

}

void trabalhador::print() const

{

    cout << funcionarioNome << funcionarioCPF;

}

//info.h

#include <string>

using std::string;

#ifndef INFO_H

#define INFO_H

class info

{

    public:

        info (string = "");

        void setInfoDado (string);

        void setInfo ();

    private:

        string infoDado;

};

#endif

//info.cpp

#include <iostream>

using std::cout;

using std::cin;

#include <string>

using std::string;

using std::getline;

#include "info.h"

info::info (string info)

{

    setInfoDado (info);

}

void info::setInfoDado (string info)

{

    infoDado = info;

    setInfo();

}

void info::setInfo ()

{   

    string nome;

    getline (cin, nome);

    infoDado = nome;

}

标签: c++

解决方案


operator<<您需要为您的课程提供重载info

对此的要求源于该行

cout << funcionarioNome << funcionarioCPF;

它需要知道如何使用ostream.

这很简单

class info
{
    public:
        // ...
        friend std::ostream& operator<<(std::ostream& os, info const& inf)
        {
            os << inf.infoDado;
            return os;
        }
    // ...
};

在此处查看完整代码。


推荐阅读