求助一個問題,看《C++程式語言設計》中寫模板類的enum可以在類外定義,大概是這樣的結構:
template<typename T>
class C {
public:
enum E :int ;
};
template<typename T>
enum C<T>::E { a, b, c };
在VS2017下運行不過,報C3113,說不允許enum是模板。
另外,在有初始化器( { a, b, c })時,報E2762,列舉器已宣告(請參閱 constant "C<T>::a",abc各報一個。
模板這章連著3節實驗和預計不同,快瘋了。求解,謝謝各位。
uj5u.com熱心網友回復:
C3113不懂,E2762該不會是因為一處的E后面指定了 :int,另一處后面沒有指定,雖然都是E,但是被當成兩個不同的型別了吧?第二處 E后面也加上 :int 試試?
uj5u.com熱心網友回復:
謝謝,不過不是,加上:int后錯誤串列沒有任何變化
uj5u.com熱心網友回復:
進展:下載了DEVC++,嘗試了代碼并根據報錯資訊進行了修改,最終得到以下可運行代碼:
#include<iostream>
using namespace std;
template<typename T>
struct C {
public:
enum E:char{};//必須有{}
};
template<typename T>
enum C<T>::E:char{ a = 123, b, c };//必須有char
int main() {
C<int> c;
C<int>::E e1 = C<int>::b;
cout<<(int)e1;
}
然后發現C必須使用struct,如果使用class就會告訴我abc都是private的,不知道怎么辦。
就算是實作了模板的enum成員型別在類外定義的基本目標,形式也和書上完全不同。
同樣的代碼復制到VS時一堆錯誤,編譯器的差異怎么會有如此大的分歧...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17600.html
標籤:新手樂園
