首頁 > 後端開發 > C++ > 模板化 C 類別可以拆分為 .hpp 和 .cpp 檔案嗎?

模板化 C 類別可以拆分為 .hpp 和 .cpp 檔案嗎?

Patricia Arquette
發布: 2024-12-22 05:49:08
原創
925 人瀏覽過

Can Templated C   Classes Be Split into .hpp and .cpp Files?

將模板化 C 類拆分為 .hpp/.cpp 檔案:可能嗎?

問題:

嘗試將模板化的C 類拆分為.hpp 和由於未定義對構造函數和析構函數的引用,. cpp 檔案會導致編譯錯誤符號。

main.cpp:(.text+0xe): undefined reference to 'stack<int>::stack()'
main.cpp:(.text+0x1c): undefined reference to 'stack<int>::~stack()'
登入後複製

代碼:

stack.hpp

#ifndef _STACK_HPP
#define _STACK_HPP

template <typename Type>
class stack {
    public:
            stack();
            ~stack();
};
#endif
登入後複製

#include <iostream>
#include "stack.hpp"

template <typename Type> stack<Type>::stack() {
        std::cerr << "Hello, stack " << this << "!" << std::endl;
}

template <typename Type> stack<Type>::~stack() {
        std::cerr << "Goodbye, stack " << this << "." << std::endl;
}
登入後複製

ack.cpp

#include "stack.hpp"

int main() {
    stack<int> s;

    return 0;
}
登入後複製

main.cpp

  • 答案:
答案:

的.cpp 檔案中實作模板化類別並編譯它們是不可行的。實作必須包含在 .hpp 檔案中,因為編譯器在產生模板類別的記憶體佈局和方法定義時需要了解資料類型。嘗試獨立編譯 .cpp 檔案將導致以下問題:

將不會產生帶有類別資訊的目標檔案。 連結器將找不到以下符號目標文件,建置將會失敗。 替代方案解決方案:要隱藏實作細節,請考慮分離資料結構和演算法。建立模板化類別來表示資料結構,而非模板化類別則處理演算法並利用資料結構。這使得可以在單獨的庫中隱藏基本的實作細節,而無需依賴模板類別。

以上是模板化 C 類別可以拆分為 .hpp 和 .cpp 檔案嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板