編譯器錯誤 C2975
'argument': 'type' 的範本自變數無效,必須是編譯時間常數表達式
範本自變數與範本宣告不符;常數表達式應該會出現在角括弧內。 不允許變數做為範本實際自變數。 請檢查樣板定義,以找出正確的類型。
範例
下列範例會產生 C2975,並顯示正確的使用方式:
// C2975.cpp
template<int I>
class X {};
int main() {
int i = 4, j = 2;
X<i + j> x1; // C2975
X<6> x2; // OK
}
當您搭配 使用 __LINE__
做為編譯時間常數 /ZI
時,也會發生 C2975。 其中一個解決方案是使用 編譯,/Zi
/ZI
而不是 。
// C2975b.cpp
// compile with: /ZI
// processor: x86
template<long line>
void test(void) {}
int main() {
test<__LINE__>(); // C2975
}