[英]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.