Jump to content


Photo

O Famoso "ambiguous"


  • Faça o login para participar
1 reply to this topic

#1 l3on4rdo

l3on4rdo

    O Mestre dos Mestres

  • Usuários
  • 159 posts
  • Sexo:Não informado
  • Localidade:São Carlos - SP

Posted 30/09/2009, 01:58

Galera, estou quebrando a cabeça tentando fazer isso funcionar mas não vai de jeito nenhum...

Meu código é o seguinte :

/* 
 * File:   main.cpp
 * Author: Leonardo
 *
 * Created on 29 de Setembro de 2009, 23:05
 */

#include <stdlib.h>
#include <iostream.h>

using namespace std;
/*
 * 
 */

class Horario{
	//declaração das variaveis privadas
private:
	
	int dia,hora,minuto,segundo;

	//deixa o tempo da maneira correta
	void arruma_tempo();
	//declaração das variaveis publicas
public:
	
	//construtor com parametros
	Horario(int d = 0, int h = 0, int m = 0, int s = 0);
	Horario(int s);
	~Horario() {}

	//sobrecarga de operadores
	Horario operator+(Horario a);
	Horario operator-(Horario a);
	Horario operator*(Horario a);
	Horario operator/(Horario a);
  
	//imprime valor na tela
	void imprime_data();

	//incrementa segundos
	void incrementa_seg();

	//total de segundos para facilitar a transformações nas sobrecargas
	int total_segundos();
};

//inicializando elementos

Horario::Horario(int d, int h, int m, int s){
	dia = d;
	hora = h;
	minuto = m;
	segundo = s;
	
	arruma_tempo();
}

Horario::Horario(int s){
	segundo = s;
	dia = hora = minuto = 0;
	
	arruma_tempo();
}

int Horario::total_segundos(){
	return (segundo + minuto*60 + hora *60*60 + dia*24*60*60);
}

void Horario::arruma_tempo(){
	while(segundo >=60){
		minuto++;
		segundo -= 60;
	}
	while(minuto >=60){
		hora++;
		minuto -=60;
	}
	while(hora >= 24){
		dia++;
		hora -= 24;
	}

}

void Horario::imprime_data(){
	cout << dia << " dias " << hora << " horas " << minuto << " minutos " << segundo << " segundos" << endl;
}

void Horario::incrementa_seg(){
	segundo++;
	arruma_tempo();
}

Horario Horario::operator +(Horario a){
	return Horario(total_segundos() + a.total_segundos());
}

int main(int argc, char** argv) {

	return (EXIT_SUCCESS);
}

O erro :

main.cpp:96: error: call of overloaded `Horario(int)' is ambiguous

Alguém tem ideia de como solucionar isso ?

Obrigado
Buscando um convite do TorrentLeech ! Se tiver um, me mande uma MP ! Ratio > 1 garantida !

#2 acao11

acao11

    12 Horas

  • Usuários
  • 166 posts
  • Sexo:Não informado
  • Interesses:PHP, Java, Linux, C, Apache, CGI/Perl, JavaScript e Delphi.

Posted 17/11/2009, 16:32

O compilador não está conseguindo resolver o overload dos construtores. Veja:

Horario(int d = 0, int h = 0, int m = 0, int s = 0) pode ser considerado um construtor de 0, 1, 2, 3 ou 4 parâmetros. Quando o usuário faz uma chamada setando só o primeiro parâmetro, o construtor usado é Horario(d) com um parâmetro definido ( o d ) e os demais assumindo valor padrão. Então pra esse caso de um parâmetro há ambiguidade com a outra definição Horario(int s).




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq