Freigeben über


Compilerfehler C2975

'arg' : Ungültiges Vorlagenargument für 'Typ', konstanter Ausdruck zur Kompilierungszeit erwartet

Das Vorlagenargument stimmt nicht mit der Vorlagendeklaration überein. Innerhalb der spitzen Klammern sollte ein konstanter Ausdruck stehen. Variablen sind nicht als tatsächlich an die Vorlage übergebene Argumente zulässig. Überprüfen Sie die Vorlagendefinition, um die richtigen Typen zu finden.

Im folgenden Beispiel wird C2975 generiert:

// C2975.cpp
template<int I>
class X {};

int main() {
   int i = 4, j = 2;
   X<i + j> x1;   // C2975
   X<6> x2;   // OK
}

C2975 tritt auch auf, wenn Sie __LINE__ als Konstante zur Kompilierungszeit zusammen mit /ZI verwenden. Eine Lösung wäre, mit /Zi statt mit /ZI zu kompilieren.

// C2975b.cpp
// compile with: /ZI
// processor: x86
template<long line> 
void test(void) {}

int main() {
   test<__LINE__>();   // C2975
}