<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[constexpr zur Berechnung von Klassen groesse nutzen]]></title><description><![CDATA[<p>Hallo alle,</p>
<p>steh gerade vor einem Problem wie man constexpr die Groeße eines arrays berechnen kann basierend auf einer Klasse. Hier der Beispiel Code:</p>
<pre><code>//header.h
class ArrayContainer
{
public:
  constexpr ArrayContainer(){}
  static const int classConstant;
};
</code></pre>
<pre><code>//cppunit.cpp
#include &quot;header.h&quot;

class ContainerBuffer
{
  char buf[0xff];
};

constexpr int ArrayContainer::classConstant = sizeof(ContainerBuffer);
}
</code></pre>
<p>so funktioniertdas ganze. Was ich aber will ist in ein ArrayContainer von der groesse 'classConstant' anlegen und dann krieg ich den Fehler</p>
<blockquote>
<p>./justanotherheader.h:7:13: error: call to non-static member function without an object argument<br />
int array[getContainerSize()];<br />
^~~~~~~~~~~~~~~~</p>
</blockquote>
<p>Wieso kann ich eine const Variable als array groesse angeben?</p>
<p>@Edit Ich hatte erst vor eine forward deklaration der constexpr vorzunehmen aber das ist ja leider nicht moeglich. Ich hab aber diesen <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3308.pdf" rel="nofollow">draft (n3308)</a> gefunden, weiss jmd den status davon?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/314063/constexpr-zur-berechnung-von-klassen-groesse-nutzen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 23:22:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314063.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Feb 2013 16:17:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to constexpr zur Berechnung von Klassen groesse nutzen on Tue, 19 Feb 2013 16:24:20 GMT]]></title><description><![CDATA[<p>Hallo alle,</p>
<p>steh gerade vor einem Problem wie man constexpr die Groeße eines arrays berechnen kann basierend auf einer Klasse. Hier der Beispiel Code:</p>
<pre><code>//header.h
class ArrayContainer
{
public:
  constexpr ArrayContainer(){}
  static const int classConstant;
};
</code></pre>
<pre><code>//cppunit.cpp
#include &quot;header.h&quot;

class ContainerBuffer
{
  char buf[0xff];
};

constexpr int ArrayContainer::classConstant = sizeof(ContainerBuffer);
}
</code></pre>
<p>so funktioniertdas ganze. Was ich aber will ist in ein ArrayContainer von der groesse 'classConstant' anlegen und dann krieg ich den Fehler</p>
<blockquote>
<p>./justanotherheader.h:7:13: error: call to non-static member function without an object argument<br />
int array[getContainerSize()];<br />
^~~~~~~~~~~~~~~~</p>
</blockquote>
<p>Wieso kann ich eine const Variable als array groesse angeben?</p>
<p>@Edit Ich hatte erst vor eine forward deklaration der constexpr vorzunehmen aber das ist ja leider nicht moeglich. Ich hab aber diesen <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3308.pdf" rel="nofollow">draft (n3308)</a> gefunden, weiss jmd den status davon?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299978</guid><dc:creator><![CDATA[mosta]]></dc:creator><pubDate>Tue, 19 Feb 2013 16:24:20 GMT</pubDate></item><item><title><![CDATA[Reply to constexpr zur Berechnung von Klassen groesse nutzen on Tue, 19 Feb 2013 16:35:05 GMT]]></title><description><![CDATA[<p>Es ist unklar, was du möchtest und die Fehlermeldung passt nicht zum Code. Siehe dritten Link in meiner Signatur.</p>
<p>Jedenfalls fällt auf, dass du scheinbar zufällig <code>constexpr</code> in deinem Code verteilt hast. Das ist ganz sicher keine gute Vorgehensweise. Meinst du folgendes?</p>
<pre><code>class ArrayContainer
{
public:
  ArrayContainer(){}
  static const int classConstant;
};

class ContainerBuffer
{
  char buf[0xff];
};

const int ArrayContainer::classConstant = sizeof(ContainerBuffer);

int main()
{
  int array1[ArrayContainer::classConstant];  
}
</code></pre>
<p>Wie du siehst, nirgendwo <code>constexpr</code> . Oder meinst du dies?</p>
<pre><code>class ArrayContainer
{
public:
  ArrayContainer(){}
  static const int classConstant;
  static constexpr int get_classConstant();
};

class ContainerBuffer
{
  char buf[0xff];
};

const int ArrayContainer::classConstant = sizeof(ContainerBuffer);
constexpr int ArrayContainer::get_classConstant() { return classConstant; }

int main()
{
  int array1[ArrayContainer::get_classConstant()];  
}
</code></pre>
<p>Hier brauchst du <code>constexpr</code> . Und zwar nur bei der Funktion, die hier (für den Compiler sonst nicht ersichtlich) einen immer gleichen Wert liefert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299986</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 19 Feb 2013 16:35:05 GMT</pubDate></item><item><title><![CDATA[Reply to constexpr zur Berechnung von Klassen groesse nutzen on Tue, 19 Feb 2013 16:35:28 GMT]]></title><description><![CDATA[<p>Es gibt keine Funktion getContainerSize()?<br />
Wenn sie existieren sohl, muss sie static und constexpr sein.<br />
Ein constexpr Konstruktor ist dafür nicht notwendig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299987</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 19 Feb 2013 16:35:28 GMT</pubDate></item><item><title><![CDATA[Reply to constexpr zur Berechnung von Klassen groesse nutzen on Tue, 19 Feb 2013 17:01:43 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Ein constexpr Konstruktor ist dafür nicht notwendig.</p>
</blockquote>
<p>Es gibt keinen Grund, weshalb er nicht constexpr sein sollte. Der default-generierte Konstruktore wäre auch constexpr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2299993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2299993</guid><dc:creator><![CDATA[neineinein]]></dc:creator><pubDate>Tue, 19 Feb 2013 17:01:43 GMT</pubDate></item><item><title><![CDATA[Reply to constexpr zur Berechnung von Klassen groesse nutzen on Tue, 19 Feb 2013 18:39:11 GMT]]></title><description><![CDATA[<p>Ja, schon, aber notwendig ist es nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2300024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2300024</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 19 Feb 2013 18:39:11 GMT</pubDate></item></channel></rss>