Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Присвоить указатель переменной 
:(
    Опции темы
Sergio
  Дата 22.7.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Привет. Как првильно передать и присвоить у функцию указатель?

Код

int sso(CBuilder *aBuilder)
{
    CBuilder bBuilder;        
    &(bBuilder) = aBuilder;
}

int _tmain(int argc, _TCHAR* argv[])
{
    CBuilder  aBuilder;
    sso(&aBuilder);

    return 0;
}


Инициализация должна бить только так: (без new)
Цитата

CBuilder  aBuilder;
CBuilder bBuilder;  


Это сообщение отредактировал(а) Sergio - 22.7.2009, 18:11
PM MAIL ICQ   Вверх
Albor
Дата 22.7.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну так объяви в функции указатель, а не объект. Или я чего-то не понял.  То что ты написал не верно, так нельзя.
PM MAIL ICQ   Вверх
ISergeyN
Дата 22.7.2009, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



это?
Код

#include <iostream>

void foo(int *i){
    int x;
    x = *i;
    std::cout << x << '\n';
}
int main()
{
    int i = 10;
    foo(&i);
    return 0;
}

PM MAIL Skype   Вверх
mes
Дата 22.7.2009, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Sergio @  22.7.2009,  17:10 Найти цитируемый пост)
. Как првильно передать и присвоить

Имхо, в вопросе не хватает данных, чтоб на него можно было ответить, не имея телепатических способностей.
Не плохо было бы если бы его переформулировали..
smile




--------------------
PM MAIL WWW   Вверх
and277
Дата 22.7.2009, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mes @ 22.7.2009,  18:31)
Цитата(Sergio @  22.7.2009,  17:10 Найти цитируемый пост)
. Как првильно передать и присвоить

Имхо, в вопросе не хватает данных, чтоб на него можно было ответить, не имея телепатических способностей.
Не плохо было бы если бы его переформулировали..
smile

Точно сказал. smile 
Ты передаешь в функцию посредством аргумента указатель на объект aBuilder. Дык все же  bBuilder должен иметь значение или указывать на объект aBuilder?  Копирование указателей или присваивание значений нужно?

Это сообщение отредактировал(а) and277 - 22.7.2009, 19:24
PM MAIL   Вверх
Sergio
  Дата 22.7.2009, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



ISergeyN, вот передаю как и говориш (2 ошибки)
Код

public:

// Dialog Data
    //{{AFX_DATA(CNewGroupDlg)
    enum { IDD = IDD_PROPPAGE_NEW_LDAP };
    CEdit        m_edtName;
    //CEdit        m_edtServerName;
    //CEdit        m_edtSecurityGroup;
    CListCtrl    m_lstServers;
    //}}AFX_DATA
...

void CAddDlg::InitListServers(CListCtrl *list)
{
    m_lstServers = *list;
}

Цитата

error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'


PM MAIL ICQ   Вверх
mes
Дата 22.7.2009, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Sergio, прочитайте внимательно сообщение компилятора, он Вам прямым текстом кричит, где искать ошибку smile

Добавлено через 23 секунды
передача по указателю тут не при чем.


--------------------
PM MAIL WWW   Вверх
Albor
Дата 23.7.2009, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Sergio, ты пытаешься скопировать объект (а не указатель) СListCtrl, а оператором = этого сделать нельзя. Копировать нужно примерно так: 
Код

m_lstServers.AddString(list->GetItemString(i));// i - индекс айтема списка

За синтаксис не ручаюсь, функции могут называться по другому. Но идея понятна? Нужно в цикле пройтись по всем айтемам list и добавить их в m_lstServers.

Это сообщение отредактировал(а) Albor - 23.7.2009, 07:58
PM MAIL ICQ   Вверх
Sergio
Дата 23.7.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Albor, мне не скопировать надо а передать указатель.
PM MAIL ICQ   Вверх
zim22
Дата 23.7.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Sergio @  22.7.2009,  18:10 Найти цитируемый пост)
Как првильно передать и присвоить у функцию указатель?

Цитата

присвоить у функцию указатель

можно создать тип "указатель на функцию" и присвоить его объекту адрес нужной функции.
Код

int sso(CBuilder *aBuilder)
{
    CBuilder *bBuilder;        
    bBuilder = aBuilder;
}

int _tmain(int argc, _TCHAR* argv[])
{
    CBuilder  aBuilder;
    sso(&aBuilder);

    return 0;
}




--------------------
PM MAIL   Вверх
Albor
Дата 23.7.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Sergio @  23.7.2009,  11:18 Найти цитируемый пост)
Albor, мне не скопировать надо а передать указатель.


Указатель в функцию ты уже передал - это, в твоём коде, list. Если хочешь получить его копию, то делаешь так:
Код

CListCtrl *pList=list;

либо, если в объекте класса
Код

public:
// Dialog Data
    //{{AFX_DATA(CNewGroupDlg)
    enum { IDD = IDD_PROPPAGE_NEW_LDAP };
    CEdit        m_edtName;
    //CEdit        m_edtServerName;
    //CEdit        m_edtSecurityGroup;
    CListCtrl *   m_pLstServers;
    //}}AFX_DATA
...
void CAddDlg::InitListServers(CListCtrl *list)
{
    m_pLstServers = list;
}

Но это не очень хорошо. Здесь нужна гарантия того, что объект, на который указывает list, не будет уничтожен до тех пор, пока используется m_pLstServers.

Это сообщение отредактировал(а) Albor - 23.7.2009, 12:36
PM MAIL ICQ   Вверх
Sergio
  Дата 23.7.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Вообщем крєш у меня. Делаю как Ви советуете:
Код

{
CListCtrl list;
Load(&list);
}
...

void Load(CListCtrl *list)
{
  list->SetItemText(0, 0, "rock");  // сдесь крєш
}

Не понимаю єтого, поскольку обєкт еще живет когда я его использую 
PM MAIL ICQ   Вверх
hsilgos
Дата 23.7.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

 сдесь крєш

Может, всё таки не крешь, а ассерт? 

CListCtrl у вас создан? Или просто объявлен?
PM MAIL   Вверх
Albor
Дата 24.7.2009, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(hsilgos @  23.7.2009,  22:58 Найти цитируемый пост)
CListCtrl у вас создан?


Sergio, hsilgos прав на 100 процентов! CListCtrl наследуется от СWnd, то есть это оконный класс и для создания объекта нужно вызвать функцию Create. В данном случае сделано объявление, но объектом ещё пользоваться нельзя. Если ты пытаешься заполнить список, находящийся на форме, то свяжи с ним переменную и её адрес передай в функцию.

Это сообщение отредактировал(а) Albor - 24.7.2009, 09:16
PM MAIL ICQ   Вверх
Sergio
  Дата 24.7.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Нужно контрол пустишку в котором держать дание. Чтоби он ни к каком окну не привязивался. Вот как делаю. Все равно крєш:
Код

CListCtrl *list = new CListCtrl();
list->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT,CRect(10,10,400,200), 0, 1);
Load(list);
...

void Load(CListCtrl *list)
{
  list->SetItemText(0, 0, "rock");  // сдесь крєш
}

Помогите пожалуйста. Робота горит

Это сообщение отредактировал(а) Sergio - 24.7.2009, 11:44
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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