PDA

View Full Version : [c++] primo scoglio con la programmazione


marco.inblu
13-12-2007, 16:22
Salve a tutti del forum.
Sono alle prime armi con la programmazione in c++ e mi sono ritrovato dfronte a "problemi" che non riesco a superare.
Venamo al dunque:
ho scritto un piccolo progetto in ambiante Windows 2000 con Dev-Cpp composto da tre file:

[main.cpp]
#include <iostream>
#include "time.h"

using namespace std;

int main(int argc, char *argv[])
{
Time t; // instantiate object t of class time
cout << "The initial military time is ";
t.printMilitary();
cout << "\nThe initial standard time is ";
t.printStandard();
t.setTime( 13, 27, 6 );
cout << "\n\nMilitary time after setTime is ";

system("PAUSE");
return EXIT_SUCCESS;
}




[time.h]
class Time {
public:
Time(); // constructor
void setTime( int, int, int ); // set hour, minute, second
void printMilitary(); // print military time format
void printStandard(); // print standard time format
private:
int hour; // 0 - 23
int minute; // 0 - 59
int second; // 0 - 59
};



[time.cpp]
#include <iostream>
#include "time.h"

// Time constructor initializes each data member to zero.
// Ensures all Time objects start in a consistent state.
Time::Time()
{
hour = minute = second = 0;
}

void Time::setTime( int h, int m, int s )
{
hour = ( h >= 0 && h < 24 ) ? h : 0;
minute = ( m >= 0 && m < 60 ) ? m : 0;
second = ( s >= 0 && s < 60 ) ? s : 0;
}

// Print Time in military format
void Time::printMilitary()
{
cout << ( hour < 10 ? "0" : "" ) << hour;
cout << ":" << ( minute < 10 ? "0" : "" );
cout << minute;
}

// Print time in standard format
void Time::printStandard()
{
cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 );
cout << ":" << ( minute < 10 ? "0" : "" ) << minute;
cout << ":" << ( second < 10 ? "0" : "" ) << second;
cout << ( hour < 12 ? " AM" : " PM" );
}


Adesso vado a compilare e mi viene segnalato questo errore:
In member function `void Time::printMilitary()': `cout' undeclared (first use this function)
(Each undeclared identifier is reported only once for each function it appears in.)

In member function `void Time::printStandard()': `cout' undeclared (first use this function)
[Build Error] [time.o] Error 1


NB: se inserisco in un'unico file tutto il progetto il compilatore non mi da nessun errore e crea l'eseguibile.

COme posso risolvere il problema??

Grazie mille

tomminno
13-12-2007, 16:32
Ti manca il namespace. In time.cpp includi:

using namespace std;

marco.inblu
13-12-2007, 16:37
Cavolo!!!
Funziona!!!

Ti ringrazio per la prontezza con cui mi hai risposto.
Era già un pò che ci sbattevo la testa.

GRAZIE MILLE.

....

Vorrei approfondire questa cosa: perchè mettere questa stringa?

using namespace std;

A cosa serve?

Ciao e ancora grazie

tomminno
13-12-2007, 19:50
Vorrei approfondire questa cosa: perchè mettere questa stringa?

using namespace std;

A cosa serve?

Ciao e ancora grazie

Se fai questa domanda forse ti servirebbe una lettura di un buon libro sul C++ ;)

Comunque, in C++ esistono i namespace che sono dei "contenitori" il cui scopo principale è evitare conflitti nei nomi di classi e funzioni.

Tutta la libreria standard è racchiusa nel namespace std. Senza la specifica using tutte le volte che richiami una classe della libreria devi preporre al nome std::
nel tuo caso avresti dovuto scrivere tutte le volte std::cout.