Question: H, 
Here is my code that is giving error object is undeclared first use this function although every thing is alright, why is this happening so? that class is not visible to main function and its giving errors.

```
 #include <iostream.h>
 #include <stdio.h>
 #include <conio.h>
 using namespace std;
 class time
 {
  int min;
  int sec;
  int hour;

  public:
         time()
         {
               cout << "uninitialized constructor " << endl << endl;
               min = 0;
               sec = 0 ;
               hour = 0;
         }
         time(int m, int s, int h)
         {
                  min= m;
                  sec = s;
                  hour = h;
         }
         void display()
         {
              cout << min << ":" << sec <<":" << hour ;
         }
         void add(time t1, time t2)
         {
              int sece = t1.sec+t2.sec;
              int mint = t1.min + t2.min;
              int hours = t1.hour + t2.hour;

              time t4(sece , mint, hours);

         }
 };

 int main(void)
 {
  time t1(23, 45,11);
  time t2(11,59,59);
  time t3;
  t3.add(t1,t2);
  t3.display();
  getch();
 }

```

secondly, what does this code line means?

```
time(int h,int m,int s):hrs(h),mins(m),secs(s){}

```

could it be replaced by this:
 time(int m, int s, int h)
 {
 min= m;
 sec = s;
 hour = h;
 }

Answer: 
Your choice of the class name is a bit unfortunate, since there is already a function named [`std::time`](http://en.cppreference.com/w/cpp/chrono/c/time) in the standard library, so just choose a different name or consider using namespaces.

Concerning the second question:

This way of initializing the member variables is called **[initializer list](https://stackoverflow.com/questions/4589237/c-initialization-lists)** and is the prefered way to use. Especially when dealing with objects instead of primitive data types, only the initializer list will make sure that your objects' constructors are called only once. Otherwise, the default constructor would be called implicitly, only for you to initialize the objects a second time inside the constructor body.
Your code will not print correct output if you want t3 to really have the sum of t1,t2. If the code is actually what is required, then it is fine.

But, if add really needs to add, then don't create another local variable t4 in the function. Rather modify the member variables like this:

```
 void add(Time t1, Time t2)
 {
     sec = t1.sec+t2.sec;
     min = t1.min + t2.min;
     hour = t1.hour + t2.hour;
     min+=sec/60; sec%=60;
     hour+=min/60; min%=60;
 }

```