-4

Hi there fellow programmers, I have been trying to debug for days now the following program (code below). I am relatively new to classes on C++, the function "comparar" apparently is generating a bunch of errors that I don't understand because not enough information is given by the compiler. The errors are clearly syntactical but have been trying to fix the function "comparar" and no success whatsoever. Any help in why my program is generating such errors will be greatly appreciated, so I can keep debugging it.

My code:

#include <iostream>
#include <fstream>

using namespace std;

ofstream archivo_out("salida.txt");

class tiempo{
public:
    int hora, minuto, segundos;
    void entrada();
    void set(int new_hora, int new_minuto, int new_segundos);
    void comparar (int hora, int minuto, int segundos);
private:
    void verificar();
};

int main()
{
    tiempo Digital, Digital2;
    Digital.set(0, 0, 0);
    Digital2.set(0, 0, 0);
    Digital.entrada();
    Digital2.entrada();
    Digital.comparar(int hora, int minuto, int segundos);
    Digital2.comparar(int hora, int minuto, int segundos);
    return 0;
}

void tiempo::comparar (int Digital.hora, int Digital.minuto, int Digital.segundos, int Digital2.hora, int Digital2.minuto, int Digital2.segundos) {
        if ((int Digital.hora == int Digital2.hora) && (int Digital.minuto == int Digital2.minuto) && (int Digital.segundos == int Digital2.segundos))
            { 
                cout << "Ambos horarios son iguales" << endl; 
            }
        else if ((int Digital.hora > int Digital2.hora))
            { 
                cout << Digital.hora << Digital.minuto << Digital.segundos << "es mayor que:" << Digital2.hora << Digital2.minuto << Digital2.segundos; 
            }
        else if ((int Digital2.hora > int Digital.hora))
            { 
                cout << Digital2.hora << Digital2.minuto << Digital2.segundos << "es mayor que:" << Digital.hora << Digital.minuto << Digital.segundos; 
            }
        else if ((int Digital.hora == int Digital2.hora) && (int Digital.minuto > int Digital2.minuto))
            { 
                cout << Digital.hora << Digital.minuto << Digital.segundos << "es mayor que:" << Digital2.hora << Digital2.minuto << Digital2.segundos; 
            }
        else if ((int Digital.hora == int Digital2.hora) && (int Digital.minuto < int Digital2.minuto))
            { 
                cout << Digital2.hora << Digital2.minuto << Digital2.segundos << "es mayor que:" << Digital.hora << Digital.minuto << Digital.segundos; 
            }
        else if ((int Digital.hora == int Digital2.hora) && (int Digital.minuto == int Digital2.minuto) && (Digital.segundos > Digital2.segundos))
            { 
                cout << Digital.hora << Digital.minuto << Digital.segundos << "es mayor que:" << Digital2.hora << Digital2.minuto << Digital2.segundos; 
            }
        else
            cout << Digital2.hora << Digital2.minuto << Digital2.segundos << "es mayor que:" << Digital.hora << Digital.minuto << Digital.segundos;
    }
void tiempo::entrada() {
    cout << "Introduzca la hora seguida por minutos, seguida por segundos: \n";
    archivo_out << "Introduzca la hora seguida por minutos, seguida por segundos: \n";
    cin >> hora >> minuto >> segundos;
    verificar();
}

void tiempo::set(int new_hora, int new_minuto, int new_segundos){
    hora = new_hora;
    minuto = new_minuto;
    segundos = new_segundos;
    verificar();
}
void tiempo::verificar() {
    if ((hora > 23) || (minuto > 59) || (segundos > 59))
    {
        cout << "Valor illegal, terminando programa.\n";
        archivo_out << "Valor inlegal, terminando programa.\n";
        exit(1);
    }
}

Errors: Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:25:26: error: expected '(' for function-style cast or type construction Digital.comparar(int hora, int minuto, int segundos); //Problema con esto, no entiendo error ~~~ ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:25:36: error: expected '(' for function-style cast or type construction Digital.comparar(int hora, int minuto, int segundos); //Problema con esto, no entiendo error ~~~ ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:25:48: error: expected '(' for function-style cast or type construction Digital.comparar(int hora, int minuto, int segundos); //Problema con esto, no entiendo error ~~~ ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:26:27: error: expected '(' for function-style cast or type construction Digital2.comparar(int hora, int minuto, int segundos); // Problema con esto, no entiendo error ~~~ ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:26:37: error: expected '(' for function-style cast or type construction Digital2.comparar(int hora, int minuto, int segundos); // Problema con esto, no entiendo error ~~~ ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:26:49: error: expected '(' for function-style cast or type construction Digital2.comparar(int hora, int minuto, int segundos); // Problema con esto, no entiendo error ~~~ ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:30:35: error: expected ')' void tiempo::comparar (int Digital.hora, int Digital.minuto, int Digital.segundos, int Digital2.hora, int Digital2.minuto, int Digital2.segundos) { ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:30:23: note: to match this '(' void tiempo::comparar (int Digital.hora, int Digital.minuto, int Digital.segundos, int Digital2.hora, int Digital2.minuto, int Digital2.segundos) { ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:30:14: error: out-of-line definition of 'comparar' does not match any declaration in 'tiempo' void tiempo::comparar (int Digital.hora, int Digital.minuto, int Digital.segundos, int Digital2.hora, int Digital2.minuto, int Digital2.segundos) { ^~~~~~~~ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:31:12: error: expected ')' if ((int Digital.hora == int Digital2.hora) && (int Digital.minuto == int Digital2.minuto) && (int Digital.segundos == int Digital2.segundos)) ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:31:7: note: to match this '(' if ((int Digital.hora == int Digital2.hora) && (int Digital.minuto == int Digital2.minuto) && (int Digital.segundos == int Digital2.segundos)) ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:31:50: error: expected identifier if ((int Digital.hora == int Digital2.hora) && (int Digital.minuto == int Digital2.minuto) && (int Digital.segundos == int Digital2.segundos)) ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:35:17: error: expected ')' else if ((int Digital.hora > int Digital2.hora)) ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:35:12: note: to match this '(' else if ((int Digital.hora > int Digital2.hora)) ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:35:50: error: expected expression else if ((int Digital.hora > int Digital2.hora)) ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:37:20: error: member reference base type 'int' is not a structure or union cout << Digital.hora << Digital.minuto << Digital.segundos << "es mayor que:" << Digital2.hora << Digital2.minuto << Digital2.segundos; ~~~~~~~^~~~~ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:37:36: error: member reference base type 'int' is not a structure or union cout << Digital.hora << Digital.minuto << Digital.segundos << "es mayor que:" << Digital2.hora << Digital2.minuto << Digital2.segundos; ~~~~~~~^~~~~~~ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:37:54: error: member reference base type 'int' is not a structure or union cout << Digital.hora << Digital.minuto << Digital.segundos << "es mayor que:" << Digital2.hora << Digital2.minuto << Digital2.segundos; ~~~~~~~^~~~~~~~~ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:37:86: error: use of undeclared identifier 'Digital2' cout << Digital.hora << Digital.minuto << Digital.segundos << "es mayor que:" << Digital2.hora << Digital2.minuto << Digital2.segundos; ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:37:103: error: use of undeclared identifier 'Digital2' cout << Digital.hora << Digital.minuto << Digital.segundos << "es mayor que:" << Digital2.hora << Digital2.minuto << Digital2.segundos; ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:37:122: error: use of undeclared identifier 'Digital2' cout << Digital.hora << Digital.minuto << Digital.segundos << "es mayor que:" << Digital2.hora << Digital2.minuto << Digital2.segundos; ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:39:17: error: expected ')' else if ((int Digital2.hora > int Digital.hora)) ^ /Users/carlosmalave/Desktop/COMP3110/asig4/reloj.cpp:39:12: note: to match this '(' else if ((int Digital2.hora > int Digital.hora))

charlie
  • 1
  • 5
  • 1
    And the errors are...? ... Why `int Digital.hora` instead of just `int hora`? (same for the other vars) – deviantfan Oct 05 '15 at 23:05
  • @deviantfan ohhh yes, I will add those at the description now. Sorry – charlie Oct 05 '15 at 23:08
  • Why do you have `int` in your `if` statement? – Thomas Matthews Oct 05 '15 at 23:09
  • @deviantfan I used Digital.hora because there is also a variable 'hora' under Digital2. – charlie Oct 05 '15 at 23:10
  • @ThomasMatthews Its not needed, right? – charlie Oct 05 '15 at 23:11
  • Full stop now. The problem are not only syntax errors, Your class isn't supposed to depend on two instance names defined elsewhere. comparar shouldn't use Digital and Digital2 at all. It should compare, if anything, two instances passed as parameters. – deviantfan Oct 05 '15 at 23:12
  • @deviantfan Ok, I guess thats the mayor flaw in my program as many of the errors are popping out from Digital.comparar and Digital2.comparar – charlie Oct 05 '15 at 23:20

1 Answers1

2

First of all, in main(), you attempt to call a member function with

Digital.comparar(int hora, int minuto, int segundos);

This is incorrect. You don't need to specify the types. So the call should be

Digital.comparar(hora, minuto, segundos);

where hora, minuto and segundos are passed as arguments, and have to be defined previously.

Similar errors are all over the code. A good resource:

The Definitive C++ Book Guide and List

Also, when learning, start small. Make sure small programs compile successfully, then move on. Your is way too big and has lots of errors, too many to be enumerated here.

Community
  • 1
  • 1
vsoftco
  • 55,410
  • 12
  • 139
  • 252