ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #3341  
Старый 26.07.2009, 20:24
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

Поищи в разделе, выкладывалось несколько раз
вот например
Это если ты хотел просто пример работы, а не применительно к спикам.

Последний раз редактировалось Fata1ex; 26.07.2009 в 20:35..
 

  #3342  
Старый 26.07.2009, 22:10
horlyk
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме:
233095

Репутация: 21
Отправить сообщение для horlyk с помощью ICQ
По умолчанию

Fata1ex, оно, спасибо!
 

  #3343  
Старый 27.07.2009, 00:08
horlyk
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме:
233095

Репутация: 21
Отправить сообщение для horlyk с помощью ICQ
По умолчанию

И снова я с вопросом. В общем такая ситуация:

Код:
#include <iostream>
using namespace std;

class node
{
public:
	void C(node* _node);
	int data;	
};

void main()
{
	node* _node = 0;

	_node->C(_node);
	cout << _node->data << endl;//и тут ступор
}

void node::C(node *_node)
{
	_node = new node;
	_node->data = 5;
}
Что я тут не правильно сделал? Почему после возвращения в мейн, данные теряются? Вроде как указатели юзаю...

Я то проблему решил, но совсем не так как мне этого хотелось. Вышло что-то типа:
Код:
#include <iostream>
using namespace std;

class node
{
public:
	node* C(node* _node);
	int data;	
};

void main()
{
	node* _node = 0;

	_node = _node->C(_node);
	cout << _node->data << endl;
}

node* node::C(node *_node)
{
	_node = new node;
	_node->data = 5;
	return _node;
}
Почему первый вариант не работает? Как решить проблему?

Последний раз редактировалось horlyk; 27.07.2009 в 00:16..
 

  #3344  
Старый 27.07.2009, 02:51
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

жуть. почитай ка лучше дейтела.
я даже не могу понять, что ты хочешь этим кодом сделать... тут не список даже. чем то напоминает фабричный метод, тока зачем он здесь? O_o
 

  #3345  
Старый 27.07.2009, 09:27
Glazz
Участник форума
Регистрация: 09.08.2008
Сообщений: 139
Провел на форуме:
560332

Репутация: 15
По умолчанию

Код:
node* _node = 0;

	_node->C(_node);
Как это может быть?
Ты делаешь у указателя значение 0 и пытаешься потом по этому адресу обратиться...
 

  #3346  
Старый 27.07.2009, 09:40
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

Отличный пример того, как не стоит называть переменные в запутанных кодах.

Glazz, эээ....нулевой указатель?

Хотя да...логика кода неверна:

Код:
	node* _node = 0;

	_node->C(_node);

...

	_node = new node;
	_node->data = 5;
Короче твои переменные сами тебя и погубили Функция еще не успела создать новый _node, он еще нулевой, а ты его уже используешь. Вроде так. Хотя все равно твой код отдает руническими письменами.

Последний раз редактировалось Fata1ex; 27.07.2009 в 09:48..
 

  #3347  
Старый 27.07.2009, 13:15
horlyk
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме:
233095

Репутация: 21
Отправить сообщение для horlyk с помощью ICQ
По умолчанию

Имена то так, я по быстренькому тестовую прогу написал, так как в основной проге с этой проблемой столкнулся. Идея должна быть вот примерно такая: из мэйна я передаю указатель в метод, который принимает этот указатель и ему присваивается новый адрес оператором new. Далее изменяется значение data указателя. Дальше возврат в мэйн и вывод измененного значения на экран. Но значение остается прежним.

Следовательно, как мне из другого метода, изменить адрес указателя, который передавался.

Код:
class node
{
public:
	node() { cout << "constructor...\n"; }
	~node() { cout << "destructor...\n"; }
	void func(node* Mynode);	
	node(node&) { cout << "copy-constructor...\n"; }
	int data;	
};
void main()
{
	node* Mynode = new node;
	
	Mynode->func(Mynode);
	cout << Mynode->data << endl;
}
void node::func(node *Mynode)
{
	Mynode->data = 5;
	Mynode = new node;
	Mynode->data = 7;
}
То есть чтоб вывелось на экран значение 7, а не 5.
Не используя return в func

Последний раз редактировалось horlyk; 27.07.2009 в 13:29..
 

  #3348  
Старый 27.07.2009, 13:27
razb
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме:
2868783

Репутация: 414


Отправить сообщение для razb с помощью ICQ
По умолчанию

Цитата:
node* node::C(node *_node)
{
_node = new node;
_node->data = 5;
return _node;
}
Из-за такого бреда может лопнуть моск ))
В классе создаешь метод типа push() или какой нибуть сеттер, далее в мейне создаешь экземпляр класса(в стеки/в куче как хочешь) и уже к нему обращаешься.
 

  #3349  
Старый 27.07.2009, 13:30
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

Цитата:
Из-за такого бреда может лопнуть моск ))
ааа, ты тоже заметил

Цитата:
и ему присваивается новый адрес оператором new
мда. Почитай литературу лучше...

Вообщем не есть хорошая практика пытаться писать слова, пока не освоил алфавит. Попробуй работать пока без ООП, которое ты пытаешься сейчас применить, потому как преимуществ и особенностей его ты еще не понимаешь.

Последний раз редактировалось Fata1ex; 27.07.2009 в 13:37..
 

  #3350  
Старый 27.07.2009, 13:37
razb
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме:
2868783

Репутация: 414


Отправить сообщение для razb с помощью ICQ
По умолчанию

Цитата:
void node::func(node *Mynode)
{
Mynode->data = 5;
Mynode = new node;
Mynode->data = 7;
}
Во первых в классе есть неявный указатель на экземпляр this
Во вторых, переменная data является открытой и доступна вне класса
В третьих, у тебя тут Mynode = new node; будет утечка памяти.

В общем как сказал товарищ Fata1ex, лучше сейчас потрать больше времени на прочтение литературы и это в будущем тебе сэкономит уйму времени )

Последний раз редактировалось razb; 27.07.2009 в 13:41..
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ