<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_6_thread_35183"  />
<title>rulinux.net - Форум - Development - [g++][член статический] Зачем так сделано?</title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Development - [g++][член статический] Зачем так сделано?</title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>Re:[g++][член статический] Зачем так сделано?</title>
<link>https://rulinux.net/message.php?newsid=35183&amp;page=1#113989</link>
<guid>https://rulinux.net/message.php?newsid=35183&amp;page=1#113989</guid>
<pubDate>Sun, 13 Nov 2011 02:06:55 +0400</pubDate>
<description><![CDATA[<p>а её и нет. Концепция языка такая противоречивая. c++ fqa читал? в плюсах ещё навалом всяких странностей. Вот твой казус, если интересно http://yosefk.com/c++fqa/ctors.html#fqa-10.11</p>]]></description>
</item>
<item>
<title>Re:[g++][член статический] Зачем так сделано?</title>
<link>https://rulinux.net/message.php?newsid=35183&amp;page=1#113985</link>
<guid>https://rulinux.net/message.php?newsid=35183&amp;page=1#113985</guid>
<pubDate>Sat, 12 Nov 2011 22:42:11 +0400</pubDate>
<description><![CDATA[<p>Да, но зачем с точки зрения языка так поступать? Когда ты объявляешь статическую переменную - ты и говоришь компилятору, что она есть всегда и должна находиться &quot;где-то в оперативе&quot;. К чему заставлять кодера делать эти излишние телодвижения? Для этого должна быть какая-то веская причина, которой я не вижу.</p>]]></description>
</item>
<item>
<title>Re:[g++][член статический] Зачем так сделано?</title>
<link>https://rulinux.net/message.php?newsid=35183&amp;page=1#113977</link>
<guid>https://rulinux.net/message.php?newsid=35183&amp;page=1#113977</guid>
<pubDate>Sat, 12 Nov 2011 20:08:35 +0400</pubDate>
<description><![CDATA[<p>Потому что внутри объекта это declaration, а нужно ещё definition. Просто потому что для твоей переменной нужно выделить оперативу. Для не-статических переменных класса оператива выделяется когда создаётся экземпляр объекта. А статические есть вообще всегда, и должны где-то находиться в оперативе. При декларации же никакая оператива не выделяется, и физически до определения переменной есть тольео её упоминание, а её самой нет. Это как в plain c, можно объявить в скольки угодно модулях одну и ту же external var, но где-то в одном модуле она должна находиться объявленой.</p>]]></description>
</item>
<item>
<title>[g++][член статический] Зачем так сделано?</title>
<link>https://rulinux.net/message.php?newsid=35183&amp;page=1#113879</link>
<guid>https://rulinux.net/message.php?newsid=35183&amp;page=1#113879</guid>
<pubDate>Sat, 12 Nov 2011 12:23:08 +0400</pubDate>
<description><![CDATA[<p>Делаю класс примерно такого вида:
<br>
<fieldset><legend>cpp</legend><code><br />
<span style="color: #0000ff;">class</span> MyClass <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">volatile</span> <span style="color: #0000ff;">static</span> uint8_t Member<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">public</span><span style="color: #008080;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">inline</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> &nbsp;setMember<span style="color: #008000;">&#40;</span>uint8_t v<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Member<span style="color: #000080;">=</span>v<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
&nbsp;</code></fieldset>
<br><br>
При попытке использовать где-либо метод, получаю от компайлера пиздюлей:
<br>
<fieldset><legend>text</legend><code><br />
undefined reference to `MyClass::Member`<br />
&nbsp;</code></fieldset>
<br><br>
Оказывается я обязан ещё где-то объявить статический объект вне определения класса:
<br>
<fieldset><legend>cpp</legend><code><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339900;">#include &quot;MyClass.h&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">volatile</span> uint8_t MyClass<span style="color: #008080;">::</span><span style="color: #007788;">Member</span><span style="color: #008080;">;</span><br />
&nbsp;</code></fieldset>
<br><br>
Зачем так сделано? Почему недостаточно в определении класса сообщить что у меня такой вот статический член класса используется и больше ничего не делать? </p>]]></description>
</item>
</channel>
</rss>