Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2012, 21:47   #11
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Это понятно, но почему именно так? Наследование например почему не делаете?
eval вне форума Ответить с цитированием
Старый 31.08.2012, 23:18   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ТС, проблема в непонимании порядка действий, а именно:
0)
Код:
ptr==<мусор>
1)
Код:
new A
2)
Код:
b=new B(ptr);
3)
Код:
A:: ptr=<результат из п1>
явно не то, что вы хотели.*

this для кого придумали?

PS: на шаге 2 ptr все еще мусор.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.09.2012, 00:10   #13
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Друзья, извините, пропадал интернет!

вот код(меньше не мог ), компиляция без ошибок

header файл класса CableTV

Код:
class PaketAndChannels;
class Clients;


class CableTV
{
	
public:	
	

void ClearEdits();
static CableTV* ptr;
HelpClearEdits( HWND Edit );
private:

CableTV( void );
HWND hEdit1;
PaketAndChannels* paketandchannel;
Clients *client;

};
header файл класса Clients

Код:
class CableTV;
class PaketAndChannels;
class Clients
{
		
public:
Clients( CableTV*,PaketAndChannels * );

void AskForClear();

private:
CableTV * cabletv;
PaketAndChannels *paketandchannels;
};
cpp файл класса CableTV

Код:
CableTV* CableTV :: ptr = new CableTV;

CableTV :: CableTV( void ):paketandchannel(0), client(0)
{	
paketandchannel = new PaketAndChannels( ptr );
client = new Clients( ptr,paketandchannel );
	
}

void CableTV :: ClearEdits()
{
HelpClearEdits( hEdit1 );// исключение
}

void CableTV :: HelpClearEdits( HWND Edit )
{
SendMessage( Edit, EM_SETSEL, 0, -1 );
SendMessage( Edit, WM_CLEAR, 0, 0 ); 
}
cpp файл класса Clients

Код:
Clients :: Clients( CableTV *cableclient, PaketAndChannels *paketchannel )
{	
	paketandchannels = paketchannel;
	cabletv = cableclient;
	
}

void Clients :: AskForClear( )
{
	cabletv -> ClearEdits( );//вызов функции класса CableTV
	}
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 01.09.2012, 00:23   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ошибка ваша не изменилась ни капли.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.09.2012, 00:31   #15
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Пепел Феникса, не понимаю, подскажите, вот main
Код:
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszCmdLine, int nCmdShow)
{
	_wsetlocale(LC_ALL,L"rus");
	return DialogBox(hInst, MAKEINTRESOURCE(IDD_MAINWINDOW), NULL, CableTV::DlgProc);
}
Из класса Clients корректно вызываются все функции класса CableTV , которые не связаны с окнами
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 01.09.2012, 00:51   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

смотрим внимательно.
вот код создания статического объекта
Код:
CableTV* CableTV :: ptr = new CableTV;
изначально ptr ничему не равен, и не изменится пока успешно не закончится создание объекта.
а теперь смотрим в конструктор:
Код:
CableTV :: CableTV( void ):paketandchannel(0), client(0)//кстати тут в списке нет смысла.
{	
paketandchannel = new PaketAndChannels( ptr );//ну и чему тут равен ptr?
client = new Clients( ptr,paketandchannel );	//аналогично?
}
вам же нужно чтоб в конструктор ваш класс передал указатель на себя, а это this.

меняем на:
Код:
CableTV :: CableTV( void )
{	
paketandchannel = new PaketAndChannels(this);
client = new Clients(this,paketandchannel);
}
надеюсь ошибка ясна.

ошибка возникает при доступе к данным через неверный указатель, а не при вызове невиртуальных методов между прочим.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 01.09.2012 в 00:54.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.09.2012, 21:04   #17
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Спасибо Вам огромное!

Спасибо Вам, однако не понятно когда создается this, после выполнения конструктора? Неужели на момент входа в конструктор уже создан this , что его можно передавать в другие классы? Я читал, что this создается при вызове метода и идет первым неявным параметром в метод, чтобы метод знал с данными какого объекта работать (Дейтел).

Спасибо!
Желание тысяча возможностей, нежелание - тысяча причин

Последний раз редактировалось Stilet; 01.09.2012 в 22:24.
Стремящийся вне форума Ответить с цитированием
Старый 01.09.2012, 22:13   #18
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Конструктор - тот же метод, так что в нем тоже присуствует this. Другое дело, что то, на что он указывает еще не создано и этим и займется конструктор, но указатель как таковой уже существует.
waleri вне форума Ответить с цитированием
Старый 01.09.2012, 22:47   #19
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

waleri, спасибо
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступ к обьекту другого класса. the27mart Общие вопросы по Java, Java SE, Kotlin 6 08.08.2012 19:30
Доступ к элементам диалогового окна MFC из другого класса applegrub Visual C++ 0 22.04.2012 20:04
Доступ к TextBox в WPF из другого класса CoderWPF WPF, UWP, WinRT, XAML 2 15.03.2012 11:07
Конструктор класса не хочет принимать в качестве параметра адрес объекта другого класса Jugger Помощь студентам 3 05.01.2012 04:10
Доступ из другого класса KipZ Windows Forms 1 06.02.2011 15:22