Saya mengalami sedikit kesulitan bekerja dengan metode statis di C ++
Contoh .h:
class IC_Utility {
public:
IC_Utility();
~IC_Utility();
std::string CP_PStringToString( const unsigned char *outString );
void CP_StringToPString( std::string& inString, unsigned char *outString, short inMaxLength );
static void CP_StringToPString( std::string& inString, unsigned char *outString);
void CP_StringToPString( FxString& inString, FxUChar *outString);
};
Contoh .cpp:
static void IC_Utility::CP_StringToPString(std::string& inString, unsigned char *outString)
{
short length = inString.length();
if( outString != NULL )
{
if( length >= 1 )
CPLAT::CP_Utility::CP_CopyMemory( inString.c_str(), &outString[ 1 ], length );
outString[ 0 ] = length;
}
}
Saya ingin menelepon seperti:
IC_Utility::CP_StringToPString(directoryNameString, directoryName );
Tapi saya mendapat kesalahan:
error: cannot declare member function 'static void IC_Utility::CP_StringToPString(std::string&, unsigned char*)' to have static linkage
Saya tidak mengerti mengapa saya tidak bisa melakukan ini. Adakah yang bisa membantu saya memahami mengapa dan bagaimana mencapai apa yang saya inginkan?
c++
static-linking
ABV
sumber
sumber
static
kata kunci dalam file .cpp. C ++ tidak mengizinkannya./* static */
. Saya suka memiliki pengubah dan argumen default yang sama dalam file .h dan .cpp.static
di file header.h
, itu berarti "terlampir ke kelas, bukan ke objek apa pun", hapusstatic
di.cpp
file, itu memiliki arti berbeda yang tidak Anda inginkan di sini.Jawaban:
Hapus
static
kata kunci dalam definisi metode. Simpan saja dalam definisi kelas Anda.static
kata kunci ditempatkan dalam file .cpp berarti bahwa fungsi tertentu memiliki hubungan statis, yaitu. itu hanya dapat diakses dari fungsi lain dalam file yang sama.sumber
static
dalam definisi metode berarti hanya metode lain di kelas yang dapat mengakses metode statis, tidak ada metode lain di luar kelas itu.static
file .cpp hanya untuk kompatibilitas dengan C.Kata kunci
static
danvirtual
tidak boleh diulang dalam definisi. Mereka seharusnya hanya digunakan dalam deklarasi kelas.sumber
Anda tidak perlu memiliki
static
definisi fungsisumber
Fungsi anggota statis harus merujuk ke variabel statis kelas itu. Jadi dalam kasus Anda,
Karena fungsi anggota Anda
CP_StringToPstring
statis, parameter dalam fungsi itu,inString
danoutString
harus dinyatakan sebagai statis juga.Fungsi anggota statis tidak merujuk ke objek yang sedang dikerjakannya tetapi variabel yang Anda deklarasikan merujuk ke objek saat ini sehingga mengembalikan kesalahan.
Anda bisa menghapus statis dari fungsi anggota atau menambahkan statis sambil mendeklarasikan parameter yang Anda gunakan untuk fungsi anggota sebagai statis juga.
sumber