我的代碼有什麼問題?它不會編譯..char數組編譯錯誤
class FileNames
{
public:
static char* dir;
static char name[100];
static void Init3D()
{
FileNames::dir = "C://3D//";
FileNames::name = "abc";
}
};
我的代碼有什麼問題?它不會編譯..char數組編譯錯誤
class FileNames
{
public:
static char* dir;
static char name[100];
static void Init3D()
{
FileNames::dir = "C://3D//";
FileNames::name = "abc";
}
};
不能分配到一個數組,所以FileNames::name = "abc"
失敗(char arr[4] = "abc"
的作品,但是,因爲這是一個直接初始化,不分配)。在這裏也可以使用char*
,或使用strcpy
將數據複製到陣列,或更好地使用std::string
,這樣可以避免原始字符串的許多缺點。
最重要的是,你需要在全局範圍的某個地方定義你的靜態成員,在函數之外: char FileNames::name[100];
。此時,即使使用數組,也可以使用=
的初始化語法,但要分配的字符串需要與數組具有相同的長度。
您必須將FileNames :: name failed - 不是FileNames :: dir。 FileNames :: dir不是數組 – Nick
謝謝,解決並澄清。 –
有兩個問題與您的代碼:
1)你複製的變量name
(兩種不同類型)。
2)你不能初始化那樣的靜態成員(見下面的例子)。
最後一件事情不是這樣的問題,但你應該考慮使用std::string
來代替,因爲它封裝了字符串的功能,所以你不需要處理原始指針。這是一個很少痛苦,尤其是如果你是新手這類事情。
它改成這樣:
// Header file
class FileNames
{
private:
static char* name;
public:
static char* dir;
};
CPP file
#include "FileNames.h"
char* FileNames::name = "abc";
char* FileNames::dir = "C://3D//";
// Now use your class...
嘗試初始化是這樣的:
class FileNames
{
public:
static char* dir;
static char name[];
};
char *FileNames::dir = "C://3D//";
char FileNames::name[100] = "abc";
你記得實際定義類以外的靜態成員?另外,我不相信你需要解決範圍,除非你真的不在課堂之外。
你得到什麼錯誤? – 2011-06-28 12:55:53
下一次,請發佈您收到的編譯錯誤。 –
你能發佈錯誤嗎? – MGZero