<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://wiki.shelek.ru/index.php?action=history&amp;feed=atom&amp;title=FAQ%3AWinAPI_VCPP%3A%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2</id>
		<title>FAQ:WinAPI VCPP:взаимные зависимости классов - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.shelek.ru/index.php?action=history&amp;feed=atom&amp;title=FAQ%3AWinAPI_VCPP%3A%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2"/>
		<link rel="alternate" type="text/html" href="https://wiki.shelek.ru/index.php?title=FAQ:WinAPI_VCPP:%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2&amp;action=history"/>
		<updated>2026-05-27T08:27:34Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://wiki.shelek.ru/index.php?title=FAQ:WinAPI_VCPP:%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2&amp;diff=703&amp;oldid=prev</id>
		<title>RXL: Новая: ===Имеется класс Class1, содержащий член типа &quot;Class2*&quot;. А в Class2 имеется член типа &quot;Class1*&quot;. Компилятор выдаёт ошиб...</title>
		<link rel="alternate" type="text/html" href="https://wiki.shelek.ru/index.php?title=FAQ:WinAPI_VCPP:%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2&amp;diff=703&amp;oldid=prev"/>
				<updated>2009-10-03T12:18:11Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: ===Имеется класс Class1, содержащий член типа &amp;quot;Class2*&amp;quot;. А в Class2 имеется член типа &amp;quot;Class1*&amp;quot;. Компилятор выдаёт ошиб...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;===Имеется класс Class1, содержащий член типа &amp;quot;Class2*&amp;quot;. А в Class2 имеется член типа &amp;quot;Class1*&amp;quot;. Компилятор выдаёт ошибку. Что надо делать?===&lt;br /&gt;
&lt;br /&gt;
Перекрёстное определение обходится следующим образом: код обоих классов разносится в пары файлов *.h и *.cpp, а перед каждым классом прописывается предопределение другого класса:&lt;br /&gt;
&lt;br /&gt;
Файл &amp;quot;class1.h&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class Class2; // предопределение Class2&lt;br /&gt;
&lt;br /&gt;
class Class1&lt;br /&gt;
{&lt;br /&gt;
	Class2* m_p2; // компилятор разрешит объявление указателя Class2*&lt;br /&gt;
&lt;br /&gt;
	void F1(Class2* p); //компилятор разрешит объявление указателя Class2*&lt;br /&gt;
	void F2(Class1* p);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл &amp;quot;class1.cpp&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;class1.h&amp;quot;&lt;br /&gt;
#include &amp;quot;class2.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void Class1::F1(Class2* p)&lt;br /&gt;
{&lt;br /&gt;
	// ...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Class1::F2(Class1* p)&lt;br /&gt;
{&lt;br /&gt;
	// ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл &amp;quot;class2.h&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class Class1; // предопределение Class1&lt;br /&gt;
&lt;br /&gt;
Class2&lt;br /&gt;
{&lt;br /&gt;
	Class1* m_p1; // компилятор разрешит объявление указателя Class1*&lt;br /&gt;
&lt;br /&gt;
	void F3(Class1* p); // компилятор разрешит объявление указателя Class1*&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Файл &amp;quot;class2.cpp&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;class2.h&amp;quot;&lt;br /&gt;
#include &amp;quot;class1.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
void Class2::F3(Class1* p)&lt;br /&gt;
{&lt;br /&gt;
	// ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После предопределения класса компилятор позволяет объявлять указатель на класс, так как переменная указателя на любой тип имеет всегда один и тот же размер (4 байта).&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ:WinAPI VCPP]]&lt;/div&gt;</summary>
		<author><name>RXL</name></author>	</entry>

	</feed>