constexpr mit std :: array - "Nicht typisiertes Template-Argument ist kein konstanter Ausdruck" [duplizieren]

8

Ich versuche Folgendes zu implementieren:

%Vor%

Aber ich kann es wegen des Fehlers nicht zum Laufen bringen:

Nicht typisiertes Vorlagenargument ist kein konstanter Ausdruck

Ich verwende Xcode 5.0. Irgendwelche Ideen?

    
Mark Ingram 17.09.2013, 10:43
quelle

2 Antworten

2

Das Problem, das wir hier haben, wird indirekt in 3.3.7 - Klassenumfang beschrieben:

%Vor%

Dieser Absatz sollte das ein bisschen mehr beschreiben (9.2.2):

  

Eine Klasse wird als vollständig definierter Objekttyp (3.9) (oder vollständiger Typ) beim Schließen} des Klassenspezifizierers betrachtet. Innerhalb der Klassenmemberspezifikation wird die Klasse in Funktionskörpern als Standardargumente als abgeschlossen betrachtet , Ausnahmebedingungen und Klammer-oder-Gleich-Initialisierer für nicht statische Datenelemente (einschließlich solcher Objekte in verschachtelten Klassen). Andernfalls wird es in seiner eigenen Klassenmitgliedsspezifikation als unvollständig betrachtet.

Da std::array<Class2, Class1::GetCount()> weder der Funktions-Body, der Standard-Argument, der Exception-Spezifikation, der Klammer-oder-gleich Initialisierer ist, wird die Klasse zu diesem Zeitpunkt als unvollständig betrachtet, also denke ich, dass es daran liegt Der Compiler entscheidet wann immer dies möglich ist oder nicht - aber das Kompilieren des Codes ist nach dem Standard OK.

Nur Lösungen, an die ich denken kann, sind die, die Sie vorgeschlagen haben, oder Kontexte in eine andere (mögliche Basisklasse) zu verschieben.

    
Nemanja Boric 17.09.2013, 17:06
quelle
2

Nach Nemanja Borics Antwort habe ich die statischen Methoden in statische Elemente umgewandelt. Das ist nicht die Lösung, die ich wollte, aber es funktioniert. Ich nehme an, die verbleibende Frage ist warum hat es nicht funktioniert?

%Vor%     
Mark Ingram 17.09.2013 12:49
quelle

Tags und Links