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
Lepaskan: 2024-12-22 05:49:08
asal
960 orang telah melayarinya

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()'
Salin selepas log masuk

Kod:

stack.hpp

#ifndef _STACK_HPP
#define _STACK_HPP

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

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;
}
Salin selepas log masuk

main.cpp

#include "stack.hpp"

int main() {
    stack<int> s;

    return 0;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan