Correct a mistake when using unsigned?

Mar 14, 2014 at 8:29pm
The program works correct, but since I'm using unsigned how can I fix it so that when I use a negative input I get an error, instead of that negative value being convert into the biggest value ( 2^32 -1 )possible unsigned can be?

I'm just learning about classes..

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78

#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

class Time{
private:
	unsigned hours;	//(legal values are in [0, 23]
	unsigned minutes;	//(legal values are in [0, 59]
	unsigned seconds;	//(legal values are in [0, 59]
public:
	//constructor
	Time( unsigned hoursValue, unsigned minutesValue, unsigned secondsValue );
	//accessors
	unsigned getHours() const;
	unsigned getMinutes() const;
	unsigned getSeconds() const;

	//mutators
	Time & setHours( unsigned hoursValue );
	Time & setMinutes( unsigned minutesValue );
	Time & setSeconds( unsigned secondsValue );

	static bool ok (unsigned hoursValue, unsigned minutesValue, unsigned secondsValue);


}; //class Time
bool die (const string & msg);

int main (){

	Time p(-1,18, 49);
	cout<<p.getHours()<<":"<<p.getMinutes()<<":"<<p.getSeconds()<<endl;
}// end main

Time::Time( unsigned hoursValue, unsigned minutesValue, unsigned secondsValue ):
	hours(hoursValue), minutes(minutesValue), seconds(secondsValue)
	{
	if (!ok(hours, minutes, seconds)) die( "Time::Time: not legal" );

	} //Time::Time


Time & Time::setHours( unsigned hoursValue ){
	if(hoursValue >59 )  die( "Time::hoursValue: not legal" );
	hours= hoursValue;
}//Time::setHours
Time & Time::setMinutes( unsigned minutesValue ){
	if(minutesValue > 59 )  die( "Time::minutesValue: not legal" );
	minutes=minutesValue;
	return *this;
}//Time::setMinutes
Time & Time::setSeconds( unsigned secondsValue ){
	if(secondsValue >59 )  die( "Time::secondsValue: not legal" );
	seconds=secondsValue;
	return *this;
}//Time::setSeconds
unsigned Time::getHours() const {
    return hours;
}
unsigned Time::getSeconds() const {
    return seconds;
}
unsigned Time::getMinutes() const {
    return minutes;
}
bool Time::ok (unsigned hoursValue, unsigned minutesValue, unsigned secondsValue){
	if ( hoursValue >23 && minutesValue > 59 && secondsValue >59 ) {
		return false;
	} else return true;
}
bool die (const string & msg) {
cerr<<endl<<"Fatal Error"<<msg<<endl;
	exit(EXIT_FAILURE);
}
Mar 14, 2014 at 8:37pm
closed account (iAk3T05o)
1
2
3
4
if (blah < 0)
{
//do something
}

unsigned time or unsigned int time?
Mar 14, 2014 at 9:38pm
Turn your compiler's warning levels up and don't ignore warnings (or tell your compiler to treat warnings as errors.)
Topic archived. No new replies allowed.