


Ralat kompilasi C++: jenis tempatan tidak dibenarkan sebagai parameter templat, bagaimana untuk menanganinya?
Apabila menulis kod C++, kadangkala anda akan menghadapi ralat kompilasi seperti "jenis tempatan tidak dibenarkan sebagai parameter templat". Ini biasanya bermakna bahawa kami menggunakan jenis tempatan dalam parameter templat, seperti kelas atau jenis struct yang ditakrifkan di dalam fungsi. Dalam artikel ini, kita akan membincangkan masalah ini dan cara menyelesaikannya.
Mula-mula, mari kita lihat mengapa ralat kompilasi ini berlaku. Dalam C++, parameter templat mesti diselesaikan pada masa penyusunan, manakala definisi jenis tempatan berlaku pada masa jalan. Oleh itu, jenis tempatan tidak boleh digunakan sebagai parameter templat kerana pengkompil tidak tahu cara menghuraikannya.
Berikan contoh untuk menggambarkan masalah ini:
#include <iostream> template <typename T> void printSize(const T& arg){ struct localStruct { int i; }myLocalStruct; //定义了一个局部结构体类型 std::cout << "Size of arg = "<<sizeof(arg)<<" "; std::cout << "Size of localStruct = "<<sizeof(myLocalStruct)<<" "; } int main() { int x = 5; printSize(x); return 0; }
Dalam kod di atas, kami mentakrifkan fungsi templat printSize, yang menerima parameter arg. Kami juga mentakrifkan jenis struktur tempatan myLocalStruct dan menggunakan sizeof untuk mendapatkan saiznya dan parameter arg.
Apabila kami menyusun kod ini, kami mendapat mesej ralat: "Jenis tempatan tidak dibenarkan sebagai parameter templat".
Untuk menyelesaikan masalah ini, kita perlu menukar jenis tempatan kepada jenis global. Kita boleh mengalihkan definisi jenis tempatan di luar fungsi, atau mentakrifkannya sebagai jenis ahli kelas.
Mari lihat bagaimana kita boleh membetulkan kod di atas menggunakan jenis global:
#include <iostream> struct localStruct { int i; }; //将局部结构体类型定义为全局 template <typename T> void printSize(const T& arg){ localStruct myLocalStruct; std::cout << "Size of arg = "<<sizeof(arg)<<" "; std::cout << "Size of localStruct = "<<sizeof(myLocalStruct)<<" "; } int main() { int x = 5; printSize(x); return 0; }
Sekarang kita telah mengalihkan definisi struct setempat di luar fungsi. Pembaikan menyusun dan berjalan dengan jayanya, dan output adalah betul.
Selain menukar jenis tempatan kepada jenis global, penyelesaian lain ialah menentukan jenis tempatan sebagai jenis ahli kelas. Pendekatan ini memerlukan beberapa kod tambahan, tetapi kadangkala lebih mudah:
#include <iostream> template <typename T> class myClass{ public: struct localStruct { int i; }; void printSize(const T& arg){ localStruct myLocalStruct; std::cout << "Size of arg = "<<sizeof(arg)<<" "; std::cout << "Size of localStruct = "<<sizeof(myLocalStruct)<<" "; } }; int main() { int x = 5; myClass<int> obj; obj.printSize(x); return 0; }
Dalam kod di atas, kami mentakrifkan jenis struct setempat sebagai jenis ahli myClass. Pembetulan ini juga menyusun dan berjalan dengan jayanya dan mengeluarkan hasil yang betul.
Untuk meringkaskan, apabila kami menghadapi ralat kompilasi "jenis tempatan tidak dibenarkan sebagai parameter templat" apabila menggunakan templat C++, kami perlu menukar jenis tempatan kepada jenis global atau jenis ahli kelas. Pembetulan ini berjaya menyelesaikan isu ini.
Atas ialah kandungan terperinci Ralat kompilasi C++: jenis tempatan tidak dibenarkan sebagai parameter templat, bagaimana untuk menanganinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Selesaikan ralat kompilasi C++: 'nomatchingfunctionforcallto'function'', bagaimana untuk menyelesaikannya? Apabila menulis atur cara dalam C++, kita sering menghadapi pelbagai ralat kompilasi. Salah satu ralat biasa ialah "fungsi nomatchingforcallto'function'". Ralat ini biasanya berlaku apabila fungsi dipanggil dan pengkompil tidak dapat mencari pengisytiharan atau definisi fungsi yang sepadan. Buku

Selesaikan ralat kompilasi C++: 'incompatibletypes', bagaimana untuk menyelesaikannya? Semasa proses pembangunan C++, kita sering menghadapi mesej ralat yang diberikan oleh pengkompil. Satu jenis ralat biasa ialah "incompatibletypes". Mesej ralat ini menunjukkan bahawa terdapat jenis ketidakpadanan dalam program, yang mungkin jenis pembolehubah tidak konsisten, jenis parameter fungsi tidak sepadan, dsb. Artikel ini akan memperkenalkan beberapa ralat ketidakserasian jenis biasa dan memberikan penyelesaian yang sepadan.

Sebagai bahasa pengaturcaraan yang cekap, C++ digunakan secara meluas dalam pelbagai bidang kerana kebolehpercayaannya. Walau bagaimanapun, dalam proses menulis kod, kita sering menghadapi beberapa ralat kompilasi, dan takrifan berulang parameter fungsi adalah salah satu daripadanya. Artikel ini akan memperincikan sebab dan penyelesaian untuk menentukan parameter fungsi berulang kali. Apakah yang mentakrifkan parameter fungsi berulang kali? Dalam pengaturcaraan C++, parameter fungsi merujuk kepada pembolehubah atau ungkapan yang muncul dalam definisi dan pengisytiharan fungsi dan digunakan untuk menerima parameter sebenar yang diluluskan apabila fungsi dipanggil. Apabila mentakrifkan senarai hujah fungsi, setiap hujah mestilah

Bagaimana untuk menyelesaikan ralat kompilasi C++: 'ambiguousoverloadfor'function''? Apabila pengaturcaraan dalam C++, kita sering menghadapi ralat kompilasi. Antaranya, ralat biasa ialah 'ambiguousoverloadfor'function' Ralat ini mengingatkan kita bahawa terdapat kekaburan dalam fungsi lebihan semasa memanggil fungsi. Artikel ini akan menerangkan punca ralat ini dan menyediakan beberapa penyelesaian untuk menyelesaikannya. Pertama, biarkan

Selesaikan ralat kompilasi C++: 'redefinitionof'function'', bagaimana untuk menyelesaikannya? Sebagai bahasa pengaturcaraan yang berkuasa, C++ sering digunakan secara meluas dalam pembangunan perisian. Walau bagaimanapun, menulis program C++ tanpa ralat tidak mudah untuk pemula. Salah satu ralat biasa ialah "redefinitionof'function'", yang merupakan ralat definisi semula fungsi. Dalam artikel ini saya akan menerangkan punca-punca ralat ini dan cara membetulkannya. Sebab ralat

Dalam pengaturcaraan C++, ralat penyusunan "berbilang definisi" (berbilang definisi) sering berlaku. Ini kerana berbilang pembolehubah, fungsi atau objek dengan nama yang sama ditakrifkan dalam atur cara. Pembolehubah, fungsi atau objek ini semuanya dianggap sama oleh pengkompil, jadi pengkompil akan menjana ralat "definisi berbilang". Dalam pengaturcaraan sebenar, bagaimana kita harus mengelakkan dan menyelesaikan masalah sedemikian? Menggunakan fail pengepala dalam C++, kita boleh menukar beberapa fungsi atau pembolehubah yang digunakan semula ke dalam

Bagaimana untuk menyelesaikan ralat kompilasi C++: 'invalidinitializationofreferenceoftype'type&'fromexpressionoftype'type''? Latar belakang masalah: Dalam pengaturcaraan C++, kadangkala kita menghadapi ralat kompilasi. Salah satunya ialah mesej ralat "invalidinitializationofreferenceof

Ralat kompilasi C++: Pembolehubah tidak ditentukan digunakan, bagaimana untuk menyelesaikannya? Apabila menulis program C++, kita sering menghadapi ralat penyusunan, salah satu ralat yang lebih biasa ialah penggunaan pembolehubah yang tidak ditentukan. Jika anda menghadapi ralat ini, jangan risau, seterusnya, artikel ini akan memperkenalkan anda cara menyelesaikan ralat ini. Sebab ralat ini ialah pembolehubah yang tidak ditentukan atau tidak diisytiharkan digunakan dalam atur cara Pengkompil C++ tidak menemui definisi pembolehubah ini, jadi ia tidak boleh memperuntukkan ruang memori, menyebabkan pengkompil menghasilkan ralat. Penyelesaian kepada masalah ini adalah seperti berikut
