Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > помогите с классом


Автор: yngwie19 11.9.2008, 14:15
Привет. Вот пример кода:
Код

#include <iostream>
#include <windows.h>
#include <time.h>

using namespace std;

class Date
{
    public:
        Date();
        void PrintDate();
    private:
        int day,month,year;
};

int main()
{

    time_t *t;
    time(t);
    tm *tm1 = localtime(t);
   
Date d;

return 0;
}

Date::Date()
{
     day = tm1->tm_mday;
     month = tm1->tm_mon;
     year = tm1->tm_year;
}


Вопрос:
При компиляции возника ошибка:

 Undefined symbol 'tm1' in function Date::Date()

Почему класс Date не видит указатель tm1


Автор: mrbrooks 11.9.2008, 14:18
yngwie19, интересно а как конструктор знает кто такой tm1 и t соответственно?  Опиши их в классе.

типа этого
Код

#include <iostream>
#include <windows.h>
#include <time.h>

using namespace std;

class Date
{
    public:
        Date();
        void PrintDate();
    private:
        int day,month,year;
        time_t *t;
        tm *tm1;
};

int main()
{  
Date d;
d.PrintDate();
return 0;
}

Date::Date()
{    
     time(t);
     tm1 = localtime(t);
     day = tm1->tm_mday;
     month = tm1->tm_mon;
     year = tm1->tm_year;
}


Либо передавай  tm1  как параметр в конструктор.

Автор: Rickert 11.9.2008, 14:28
yngwie19, tm1 - это локальный указатель функции main(), откуда о нём может быть изветсно классу?

Автор: yngwie19 11.9.2008, 14:46
а если допустим Я в классе Date и в фунции main() объявлю переменные с одинаковым именем, то они не будут конфликтовать ? и второй вопрос объясните как распределяется дня этих одинаковых переменных память.

Добавлено через 13 минут и 34 секунды
Просто Я не хотел чтобы у меня каждый раз выделалась память при создании объектов, а выделялась бы один раз

Автор: mrbrooks 11.9.2008, 15:03
1. Нет
2. Как распределишь так оно и будет.

Цитата(yngwie19 @  11.9.2008,  14:46 Найти цитируемый пост)
Просто Я не хотел чтобы у меня каждый раз выделалась память при создании объектов, а выделялась бы один раз
 Поясни.

Автор: yngwie19 11.9.2008, 15:51
все спамятью разобрался, а твой код компилится, но выдается сообщений об ошибке "first.exe вызвала ошибку приложение будет закрыто "

Автор: mrbrooks 11.9.2008, 16:12
yngwie19, ну писал то я его экспромтом. да и код на самом деле твой  smile в данном случае  я хотел донести до тебя саму идею - но не реализацию.

Автор: varnie 11.9.2008, 16:14
покажи код полностью.

Автор: Ches 12.9.2008, 07:37
Цитата(varnie @  11.9.2008,  16:14 Найти цитируемый пост)
покажи код полностью

Чего тебе не хватает?

Автор: mrbrooks 12.9.2008, 07:51
Ches,  smile видимо 
Цитата(varnie @  11.9.2008,  16:14 Найти цитируемый пост)
 код полностью.


Автор: Djinn 12.9.2008, 09:05
если ты имеешь в виду что ты собераешься юзать теже переменные за пределами класса и ночешь обьявлять еще раз их, то обьяви их в паблике:
Код

class Date
{
    public:
        Date();
        void PrintDate();
        time_t *t;
        tm *tm1;
    private:
        int day,month,year;
};


после чего его и юзай:
Код

int main()
{
   
Date d;

    time(d.t);
    d.tm1 = localtime(d.t);

return 0;
}


Или сделай ф-и которые будут принимать указаные тобой значения типа: d.set_t(); d.set_tm1();...

Автор: Ches 12.9.2008, 09:43
Тогда уж лучше так.
Код

#include <iostream>
#include <windows.h>
#include <time.h>

using namespace std;

class Date
{
    public:
        Date();
        void updateTime();
        void PrintDate();
    private:
        int day,month,year;
        time_t *t;
        tm *tm1;
};

int main()
{  
Date d;
d.PrintDate();
return 0;
}

Date::Date()
{    
     time(t);
     tm1 = localtime(t);
     day = tm1->tm_mday;
     month = tm1->tm_mon;
     year = tm1->tm_year;
}

void Date::udateTime()
{
     time(t);
     tm1 = localtime(t);
     ...
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)