首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 模板類實例化:缺少模板參數導致編譯錯誤

     編輯:程式設計綜合問答

錯誤代碼

bitSet a;      // 錯誤:缺少模板參數
bitSet b;      // 錯誤

原因

bitSet 是模板類 template <class T> class bitSet,實例化時必須提供具體類型,如 bitSet<int> a;。

正確寫法

bitSet<int> a;        // T = int
bitSet<string> b;     // T = string
bitSet<MyClass> c;    // T = 自定義類型

定義與實例化區別

  • 類模板定義:template <class T> class bitSet { ... }; — 此處 T 是佔位符,不寫具體類型。
  • 成員函數定義:template <class T> void bitSet<T>::func() { ... } — 必須帶 <T> 指明屬於哪個實例化版本。
  • 實例化對象:bitSet<int> obj; — 必須填入實際類型參數。

完整可編譯示例

#include <iostream>
#include <cassert>
using namespace std;

template <class T>
class bitSet {
    int setSize, vectorSize;
    unsigned short *bitVector;
public:
    bitSet(int sz = 50) : setSize(sz) {
        vectorSize = (setSize + 15) >> 4;
        bitVector = new unsigned short[vectorSize]();
    }
    ~bitSet() { delete[] bitVector; }
    bool add(T x) {
        if (x < 0 || x >= setSize) return false;
        int ad = x / 16, id = x % 16;
        bitVector[ad] |= (1 << (15 - id));
        return true;
    }
    bool contains(T x) const {
        if (x < 0 || x >= setSize) return false;
        int ad = x / 16, id = x % 16;
        return (bitVector[ad] >> (15 - id)) & 1;
    }
};

int main() {
    bitSet<int> a;
    a.add(5);
    cout << a.contains(5) << endl;  // 1
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved