In Template-Klassen definierte Konstanten [duplizieren]

8

Ich dachte, ich wäre mit C ++ vertraut, aber anscheinend nicht vertraut genug.
Das Problem ist, wenn Sie eine Konstante in einer Vorlagenklasse definieren, können Sie die Konstante in neuen Klassen verwenden, die von dieser Klasse abgeleitet sind, aber keine neuen Vorlagen -Klassen, die davon abgeleitet sind.

Zum Beispiel sagt gcc

  

test.h: 18: Fehler: 'theconstant' wurde in diesem Bereich nicht deklariert

wenn ich versuche, diese (vereinfachte) Header-Datei zu kompilieren:

%Vor%

Das Problem ist also, dass eine Klasse, derive1 , gut kompiliert, aber die andere Klasse, derive2 , die eine Template-Spezialisierung ist, nicht.
Nun, vielleicht ist der Fehler von gcc nicht klar genug, aber ich verstehe nicht, warum der Konstruktor in derive2 einen anderen Gültigkeitsbereich haben würde als der in derive1 .
Wenn es darauf ankommt, geschieht dies beim Kompilieren der Header-Datei selbst, nicht beim Instanziieren eines Objekts vom Typ derive2<type> .

Ich weiß auch, was ich ändern muss, um das kompilieren zu lassen, also suche ich nicht wirklich nach einzeiligen Code-Stücken als Antworten. Ich möchte verstehen, warum das passiert! Ich habe versucht, das Internet zu durchsuchen, aber anscheinend verwende ich nicht die richtigen Suchargumente.

    
Mr Lister 01.07.2012, 21:24
quelle

2 Antworten

2

Ich bin mir ziemlich sicher, dass dies Ihnen helfen wird zu verstehen:

Dein Code, der nicht kompiliert:

%Vor%

Und der Grund warum:

%Vor%

Die Spezialisierung !!! Compiler in Ihrer Zeile 18 kann nicht sicher sein, dass Sie nicht die Basis & lt; & gt; in der Art, dass diese Konstante überhaupt nicht da sein wird.

    
PiotrNycz 01.07.2012, 22:36
quelle
2

Versuchen Sie

%Vor%

Im Grunde haben Sie den unvollständigen Bereich für "theconstant" angegeben.

    
Viktor Latypov 01.07.2012 21:39
quelle