What's wrong with this code ?

My code compiles with few warnings about deprecated conversion from string constant to char, but program not working.
here is the code :

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include "laikas.hpp"
int main()
{
    Laikas a1, a3("08:48:11");
    Laikas a4(a3);
    a1.Ivesti("a1");
    Laikas a5 = a1;
    a1.Isvesti("a1");
    a3.Isvesti("a3");
    a4.Isvesti("a4");
    a5.Isvesti("a5");
    return 0;
}
/////////Laikas.hpp////////////////////

#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;

class Laikas
{
private:
    int valandos, minutes, sekundes;
public:
    Laikas (int val=0, int min=0, int sek=0) :
        valandos (val), minutes (min), sekundes (sek) {}
//Konstruktorius char * tipo konversijai  i klases tipa
    Laikas (char *pradinis);
//Tuscias destruktorius
    ~Laikas()  {}
//Klases kintamuju reiksmiu ivestis
    void Ivesti(char *pavadinimas);
//Klases kintamuju reiksmiu isvestis
    void Isvesti(char *pavadinimas) const;
//1 sekundes pridejimas -- priesdelinis ++
    Laikas & operator ++();
//1 sekundes pridejimas -- priesaginis ++
    Laikas operator ++(int);
//2 objektu Laikas palyginimas ar lygus
    bool operator ==(const Laikas & kitas) const;
//2 objektu Laikas palyginimas ar nelygus
    bool operator !=(const Laikas & kitas) const;
//2 objektu Laikas sudetis
    Laikas operator +(const Laikas & kitas) const;
//2 objektu Laikas sudetis ir pryskirimas
    void operator +=(const Laikas & kitas);
//Konstantos pridejimas prie objekto Laikas
    void operator +=(int sekundes);
};
///////Laikas.cpp///////////////////////

#include "laikas.hpp"

Laikas::Laikas(char *pradinis)
{
    char *skyrikliai = ",:.";
    valandos = atoi(strtok(pradinis, skyrikliai));
    minutes = atoi(strtok(NULL, skyrikliai));
    sekundes = atoi(strtok(NULL, skyrikliai));

}

void Laikas::Ivesti(char *pavadinimas)
{
    cout << "Objektas " << pavadinimas << endl;
    cout << "Iveskite valandas ";
    cin >> valandos;
    cout <<"Iveskite minutes ";
    cin >> minutes;
    minutes %= 60;
    cout << "Iveskite sekundes ";
    cin >> sekundes;
    sekundes %= 60;
}

void Laikas::Isvesti(char *pavadinimas) const
{
    cout << pavadinimas << " " << valandos << ":"
         << minutes << ":" << sekundes << endl;
}
Laikas & Laikas::operator ++()
{
    sekundes++;
    if (sekundes >= 60)
    {
        sekundes -= 60;
        minutes++;
        if (minutes >= 60)
        {
            minutes -= 60;
            valandos++;
        }
    }
    return *this;
}
Laikas Laikas::operator ++(int)
{
    Laikas a1 = *this;
    ++*this;
    return a1;
}
bool Laikas::operator == (const Laikas & kitas) const
{
    return (sekundes == kitas.sekundes) &&
           (minutes == kitas.minutes) &&
           (valandos == kitas.valandos);
}
bool Laikas::operator != (const Laikas & kitas) const
{
    return !(*this == kitas);
}
Laikas Laikas::operator +(const Laikas & kitas) const
{
    Laikas a1;
    a1.sekundes = (sekundes + kitas.sekundes) % 60;
    a1.minutes  = ((sekundes + kitas.sekundes) / 60 + minutes + kitas.minutes) % 60;
    a1.valandos = ((sekundes + kitas.sekundes) / 60 + minutes + kitas.minutes) / 60 + valandos + kitas.valandos;
    return a1;
}
void Laikas::operator +=(const Laikas & kitas)
{
    int sek = (sekundes + kitas.sekundes) % 60;
    int min = ((sekundes + kitas.sekundes) /60 + minutes + kitas.minutes) % 60;
    int val = ((sekundes + kitas.sekundes) / 60 + minutes + kitas.minutes) / 60 + valandos + kitas.valandos;
    sekundes = sek;
    minutes = min;
    valandos = val;
    // *this = Laikas(val, min, sek);
    //atlieka ta pati ka ir pries tai esancios 3 eilutes
}
void Laikas::operator +=(int sekundes)
{
    int sek = (Laikas::sekundes + sekundes) % 60;
    int min = ((Laikas::sekundes + sekundes) /60 + minutes) % 60;
    valandos = ((Laikas::sekundes + sekundes) / 60 + minutes) / 60 + valandos;
    Laikas::sekundes = sek;
    minutes = min;
}

Last edited on
Put your code into <> format tag. Also you will get more helps & replies from others.
Last edited on
Please post your compiler output

1
2
3
4
//Klases kintamuju reiksmiu ivestis
    void Ivesti(char *pavadinimas);
//Klases kintamuju reiksmiu isvestis
    void Isvesti(char *pavadinimas) const;


Is this a problem? To overload a function, the functions must have differing numbers / types of arguments - otherwise the compiler cannot tell which one to call.

You functions take pointer to char, but you send them string literals. So just use string instead of pointer to char.

Hope all goes well.
Topic archived. No new replies allowed.