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

C++ shared_ptr 編譯錯誤:缺少頭文件或 C++ 版本過低,建議用 Boost 或升級標準

     編輯:程式設計綜合問答

錯誤信息

ERROR: shared_ptr does not name a type

截圖顯示代碼中直接使用 shared_ptr 但編譯器不認識。

編譯錯誤截圖1 編譯錯誤截圖2

原因分析

  1. 缺少頭文件包含:shared_ptr 定義在 <memory> (C++11 標準庫) 或 <boost/shared_ptr.hpp> (Boost 庫)。未 #include 導致編譯器不知其類型。
  2. C++ 標準版本過低:std::shared_ptr 從 **C++11** 引入。若編譯器默認 C++98/03(如 VS2010、GCC 4.3 以下),需顯式開啟 C++11 支持(-std=c++11、/std:c++11),或升級編譯器版本。
  3. 命名空間未指定:需寫 std::shared_ptr 或 using namespace std;(不推薦全局 using)。

解決方案

方案 A:使用標準庫 (C++11/14/17/20) —— 首選

#include <memory>  // 必須包含

// 使用
std::shared_ptr<MyClass> ptr = std::make_shared<MyClass>(args...);
// 或
std::shared_ptr<MyClass> ptr(new MyClass(args...)); // C++11 無 make_shared 時

編譯選項:
GCC/Clang: -std=c++11 (或 c++14/17/20)
MSVC (VS2015+): 默認支持,舊版項目屬性 → C/C++ → Language → C++ Language Standard → /std:c++14 等。

方案 B:使用 Boost.Shared_ptr —— 兼容舊編譯器

#include <boost/shared_ptr.hpp>

// 使用
boost::shared_ptr<MyClass> ptr(new MyClass(args...));
// 或工廠函數
boost::shared_ptr<MyClass> ptr = boost::make_shared<MyClass>(args...); // Boost 1.53+

需鏈接 Boost 庫(僅頭文件庫則無需鏈接),適配 C++03 環境。

建議

  • **現代項目強制 C++17 以上**,直接用 std::shared_ptr + std::make_shared,性能最優、無外部依賴。
  • 避免手寫 new,優先 make_shared(單次分配控制塊+對象,異常安全)。
  • 檢查項目中是否混用 std:: 和 boost:: 智能指針,統一標準避免轉換麻煩。

補上 #include <memory> 並確保編啟用 C++11+,即可解決 shared_ptr does not name a type 錯誤。

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