Rumah >pembangunan bahagian belakang >C++ >Bolehkah Kelas Templat C Dipisahkan kepada Fail .hpp dan .cpp?

Bolehkah Kelas Templat C Dipisahkan kepada Fail .hpp dan .cpp?

Patricia Arquette
Patricia Arquetteasal
2024-12-22 05:49:08926semak imbas

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

Memisahkan Kelas C Templat kepada Fail .hpp/.cpp: Adakah Mungkin?

Masalah:

Percubaan untuk memisahkan kelas C templat kepada fail .hpp dan .cpp menghasilkan ralat penyusunan disebabkan oleh rujukan yang tidak ditentukan kepada pembina dan pemusnah simbol.

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

Kod:

stack.hpp

#ifndef _STACK_HPP
#define _STACK_HPP

template <typename Type>
class stack {
    public:
            stack();
            ~stack();
};
#endif

st ack.cpp

#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;
}

main.cpp

#include "stack.hpp"

int main() {
    stack<int> s;

    return 0;
}

Jawapan:

Ia tidak boleh dilaksanakan untuk melaksanakan kelas templat dalam fail .cpp yang berasingan dan menyusunnya. Pelaksanaan mesti disertakan dalam fail .hpp kerana pengkompil memerlukan pengetahuan tentang jenis data apabila menjana susun atur memori dan definisi kaedah untuk kelas templat. Percubaan untuk menyusun fail .cpp secara bebas akan mengakibatkan isu berikut:

  • Fail objek tidak akan dijana dengan maklumat kelas.
  • Penyambung tidak akan menemui simbol dalam fail objek, dan binaan akan gagal.

Alternatif Penyelesaian:

Untuk menyembunyikan butiran pelaksanaan, pertimbangkan untuk mengasingkan struktur data dan algoritma. Buat kelas templat untuk mewakili struktur data, manakala kelas bukan templat mengendalikan algoritma dan menggunakan struktur data. Ini membolehkan penyembunyian butiran pelaksanaan penting dalam perpustakaan berasingan tanpa bergantung pada kelas templat.

Atas ialah kandungan terperinci Bolehkah Kelas Templat C Dipisahkan kepada Fail .hpp dan .cpp?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn