Overload getline

Well, i have to do this for university and i don't find on google how to do the getline overload, i don't know if the code's class is right or if i'm not doing well on the main, so if you can help me that would be amazing

PD: the code is in spanish, because i'm from South America

Class CCadena.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef CCADENA_H
#define CCADENA_H
#include <iostream>

class CCadena
{
    private:
		std::string p;
		int tam;

    public:
		CCadena();
		~CCadena();
		friend std::ostream& operator << (std::ostream&, const CCadena&);
		friend std::istream& operator >> (std::istream&, CCadena&);
		friend std::istream& getline (std::istream&, CCadena&);
		void operator = (const CCadena&);
		bool operator == (const CCadena&);

};

#endif // CCADENA_H 


Definition class CCadena.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include "ccadena.h"

CCadena::CCadena(){
}


std::ostream &operator <<(std::ostream& os, const CCadena& c){
	os<<c.p;
	return (os);
}

std::istream &operator >>(std::istream& is, CCadena& c){
	is>>c.p;
	is.ignore();
	return (is);
}

std::istream & getline(std::istream& is, CCadena& c){
	getline(is,c);
	return is;
}

void CCadena::operator =(const CCadena& c){
	int i;

	this->p=c.p;
	return;
}

bool CCadena::operator ==(const CCadena& c) {

	if(this->p==c.p)
		return true;
	else
		return false;

}

CCadena::~CCadena(){
}


main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include"ccadena.h"

int main()
{
	CCadena i;
	CCadena j;

	std::cout<<"Ingrese cadena de caracteres: ";
	std::cin>>i;
	std::cout<<"Ingrese cadena de caracteres: ";
	std::cin>>j;

	if(i==j)
		std::cout<<"YAS"<<std::endl;
	else
		std::cout<<"NOPE"<<std::endl;

	std::cout<<"I: "<<i<<std::endl;
	std::cout<<"J: "<<j<<std::endl;
	i=j;
	std::cout<<"I: "<<i<<std::endl;
	std::cout<<"J: "<<j<<std::endl;
	if(i==j)
		std::cout<<"YES"<<std::endl;
	else
		std::cout<<"NOPE"<<std::endl;

	std::cout<<"I: "<<i<<std::endl;
	std::cout<<"J: "<<j<<std::endl;

	std::cout<<"Ingrese cadena de caracteres: ";
	std::cin.getline(i, 140,'\n');
	std::cout<<"Ingrese cadena de caracteres: ";
//	std::getline(j,140);

	std::cout<<"I: "<<i<<std::endl;
	std::cout<<"J: "<<j<<std::endl;
	if(i==j)
		std::cout<<"YAS"<<std::endl;
	else
		std::cout<<"NOPE"<<std::endl;

	std::cout<<"I: "<<i<<std::endl;
	std::cout<<"J: "<<j<<std::endl;
	i=j;
	std::cout<<"I: "<<i<<std::endl;
	std::cout<<"J: "<<j<<std::endl;
	if(i==j)
		std::cout<<"YES"<<std::endl;
	else
		std::cout<<"NOPE"<<std::endl;
	return 0;
}



Thanks to all of you
And sorry if i'm so bad in English
Last edited on
> i don't find on google how to do the getline overload
De la misma manera que con cualquier otra función, usando el mismo nombre pero cambiando el tipo o cantidad de argumentos.


> std::cin.getline(i, 140,'\n');
error: no matching function for call
(para la próxima, incluí los mensajes de error)

Estás intentando llamar a una función miembro que recibe 3 argumentos
- una CCadena
- un número
- un caracter


La sobrecarga que propusiste
1
2
3
4
std::istream & getline(std::istream& is, CCadena& c){
	getline(is,c); //¿?
	return is;
}

Es una función no-miembro que recibe 2 argumentos
- un istream
- una CCadena

Las funciones son distintas.

Aparte, la llamada getline(is, c); generaría una recursión sin caso base.



English:
Overload the function as you would with any other function.
The compilation is failing because the call does not match any function declaration.
Your implementation of getline contains a recursive call and no base case.
Oh, gracias, ya estaba volviendome loca pensando en como hacerlo
Topic archived. No new replies allowed.