Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Член указатель глобальной переменной 
:(
    Опции темы
Saphir
  Дата 25.2.2010, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Здравствуйте.
Создал проект MFC, в нем 3 диалога: главный диалог, диалог для ввода данных и диалог для вывода. Передавать данные я хочу через глобальные переменные. Объявляю глобальную переменную в диалоге ввода, там инициализирую ее, вызывая метод, в котором выделяю память и инициализирую члены, в том числе член-указатель этой памятью. Отладчик показывает, что все члены объекта были правильно инициализированы. Далее в диалоге вывода я объявляю эту переменную с параметром extern, и в конструкторе диалога вывода я вызываю метод этой глобальной переменной, пытаясь инициализировать переменные диалога. При вызове этого метода в отладчике значение члена-указателя - Bad Ptr.
Вопросы: почему там Bad Ptr и как получить вместо Bad Ptr нормальный указатель?..
PM MAIL   Вверх
Andrey44
Дата 26.2.2010, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Saphir, покажи как объявляешь.
Работа с глобальными переменными - не есть хорошо.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Saphir
Дата 26.2.2010, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Andrey44, это моя первая программа, использующая MFC. Поэтому сначала решил попробовать такой способ и наткнулся на эту ошибку...
Код

class CTv
{       
        wchar_t* manufacturer;
 
public:
        CTv();
        void m_in(wchar_t* m);
        void m_out(wchar_t* m);
        ~CTv(void);
};
 
CTv::CTv()
{
}
 
void CTv::m_in(wchar_t* m)
{
        if (m) 
        {
                manufacturer = new wchar_t[wcslen(m)];
                wcscpy(manufacturer,m);
        }
}
 
void CTv::m_out(wchar_t* m)
{
        m = new wchar_t[wcslen(manufacturer)];
        wcscpy(m,manufacturer);
 
}
 
CTv::~CTv(void)
{
}


В реализации диалога ввода
Код

CTv tv;
 
void CIn::OnBnClickedOk()
{
        UpdateData();
        tv.m_in(v_tv_m.GetBuffer());
        // TODO: Add your control notification handler code here
        OnOK();
}


В реализации диалога вывода
Код

extern CTv tv;
 
COut::COut(CWnd* pParent /*=NULL*/)
        : CDialog(COut::IDD, pParent)
        , v_tv_m(_T(""))
{
        tv.m_out(v_tv_m.GetBuffer());
}

PM MAIL   Вверх
Andrey44
Дата 26.2.2010, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Код

static CTv tv;



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Saphir
Дата 26.2.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Теперь вылезает Out.obj : error LNK2001: unresolved external symbol "class CTv tv" в реализации диалога вывода, несмотря на то что там есть #include "In.h" (заголовочный файл диалога ввода)
PM MAIL   Вверх
Andrey44
Дата 26.2.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Цитата(Saphir @  26.2.2010,  12:52 Найти цитируемый пост)
Теперь вылезает

ну да, конечно
Лучше тогда глобальный объект делать указателем, потому что его надо инициализироватьж
Код

static CTv *tv = NULL;



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Saphir
Дата 26.2.2010, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Все та же ошибка линковки осталась.  smile  Может быть решение где-то в настройках проекта?

Это сообщение отредактировал(а) Saphir - 26.2.2010, 16:14
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.