Ralat: Simbol Tidak Ditakrifkan Semasa Menyusun dengan Pustaka Statik
Apabila menyusun kod C dalam XCode, anda mungkin menghadapi mesej ralat "Simbol tidak ditentukan untuk seni bina i386." Ralat ini biasanya berlaku disebabkan pembolehubah statik yang tidak ditentukan dalam kod.
Butiran Masalah
Dalam kod yang disediakan, Log kelas mempunyai pembolehubah statik theString yang diisytiharkan dalam pengepala fail Log.h tetapi tidak ditakrifkan dalam fail pelaksanaan Log.cpp. Ini menyebabkan pemaut tidak dapat menyelesaikan rujukan kepada pembolehubah semasa penyusunan.
Penyelesaian
Untuk menyelesaikan ralat ini, anda mesti menentukan pembolehubah statik dalam pelaksanaan fail.
// Log.cpp #include "Log.h" #include <iostream> string Log::theString; // Define static here void Log::method(string arg) { theString = "hola"; cout << theString << endl; }
Tambahan Syor
Ia juga disyorkan untuk mengalih keluar baris menggunakan ruang nama std; daripada fail pengepala kerana ia mencemarkan ruang nama global dengan std di mana sahaja pengepala disertakan. Sebaliknya, anda harus menyatakan ruang nama std secara eksplisit apabila menggunakan objeknya.
// Log.h #include <iostream> #include <string> class Log { public: static void method(std::string arg); private: static std::string theString; };
Atas ialah kandungan terperinci Mengapa Saya Mendapat 'Simbol Tidak Ditakrifkan untuk Seni Bina i386' Apabila Menggunakan Pembolehubah Statik dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!