繁体   English   中英

组合:作为类成员的对象

[英]Composition: Objects as Members of Classes

我正在使用 Composition: Objects as Members of Classes 的概念编写代码,这个错误出现在我身上:[Error] no match to 'operator<<'。 任何人都可以帮助我吗? 当我尝试包含 trabalhador.h 和 trabalhador.cpp 文件时,错误开始出现。 如果我尝试在没有这两个文件的情况下编译代码,它可以工作,但我需要 bouth,因为我试图自己实现这个概念。

这是代码:


//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;

}

您需要为您的info类提供一个重载的operator<<

对此的要求源于行

cout << funcionarioNome << funcionarioCPF;

它需要知道如何使用ostream呈现类。

就这么简单

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

此处查看完整代码。

//new constructor in trabalhador.cpp
trabalhador::trabalhador (const info &infoNome, const info &infoCPF)
:funcionarioNome (infoNome),
funcionarioCPF (infoCPF)
{
    cout << "\nDados do funcionario: \n";
    print();
}

//function created in trabalhador.cpp
void trabalhador::print() const
{
    funcionarioNome.print();
    funcionarioCPF.print();
}

//function created in info.h
void print () const;

//function created in info.cpp
void info::print () const
{
    cout << infoDado << "\n";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM