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

C++ 模板類繼承 std::list 編譯錯誤:缺少命名空間 std::

     編輯:程式設計綜合問答

錯誤 error C2143: syntax error : missing ',' before '<' 發生在 class AList : public List<Elem>,原因是 List 屬於 std 命名空間,未加 std:: 或 using namespace std;。

錯誤代碼

#include <list>
template <class Elem>
class AList : public List<Elem> {  // 錯誤:List 未聲明
    // ...
};

修正方案 (二選一)

  1. 添加 using namespace std; (頭文件中不推薦)
    #include <list>
    using namespace std;
    
    template <class Elem>
    class AList : public list<Elem> { ... };
    
  2. 顯式限定 std::list (推薦,避免命名空間汙染)
    #include <list>
    
    template <class Elem>
    class AList : public std::list<Elem> { ... };
    

其他代碼問題補充

  • 成員變量拼寫不一致:listArrary / listArray / listArrary 混用,統一為 listArray。
  • DefaultListSize 未定義,需定義常量或構造函數默認參數。
  • rightLength() 調用但類中無此方法,應為 right()。
  • 模板類方法實現需放在頭文件中 (或 .tpp 包含),否則鏈接錯誤。

修正後關鍵片段

#include <list>
#include <iostream>

const int DEFAULT_SIZE = 100;

template <class Elem>
class AList : public std::list<Elem> {
private:
    int maxSize, listSize, fence;
    Elem* listArray;
public:
    AList(int size = DEFAULT_SIZE) : maxSize(size), listSize(0), fence(0) {
        listArray = new Elem[maxSize];
    }
    ~AList() { delete[] listArray; }
    // ... 其他方法實現直接寫在類內或頭文件下方
};

加上 std:: 即可解決編譯錯誤,並修正拼寫與邏輯問題使代碼可運行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved