這是我的代碼。編譯時指針「沒有類型」?
struct player
{
char* name;
int* id;
id = new int[5];
};
當我編譯,它說:「錯誤:‘ID’不名一型」,指向行,其中指針5個整數分配的空間就行了。
不要問我爲什麼我需要一個整數數組;這是一個班級項目,是必需的(我們的老師喜歡讓我們做不必要的事情給我們練習)。
這是我的代碼。編譯時指針「沒有類型」?
struct player
{
char* name;
int* id;
id = new int[5];
};
當我編譯,它說:「錯誤:‘ID’不名一型」,指向行,其中指針5個整數分配的空間就行了。
不要問我爲什麼我需要一個整數數組;這是一個班級項目,是必需的(我們的老師喜歡讓我們做不必要的事情給我們練習)。
試試這個:
struct player
{
char *name;
int id[5];
};
我會,但必須聲明所有使用該程序動態分配的數組。因此,我不能以這種方式聲明數組。 – Bobazonski
@ user1362548:請參閱下面的AndreyT的回答。 – thokra
你是怎麼想出這個代碼和你期望它做什麼?
此行
id = new int[5];
看起來像一個表達式語句。這個語句在類定義中做了什麼?表達式語句屬於函數內部,而不是其他地方。您不允許將它們注入到類定義中。他們不屬於那裏。這是編譯器告訴你的那個錯誤信息:它期望下一個成員聲明的類型名稱,而是看到以id
開頭的東西,並且通常在該上下文中沒有意義。
如果您嘗試使用內聯初始化,正確的語法將
struct player
{
char* name;
int* id = new int[5];
};
初始化程序已是聲明的一部分,如上圖所示。你不能把它分解成單獨的語句,把它放入類定義中,並期望編譯器找出你的意思。
否則(即如果你不嘗試使用內聯初始化),你必須在構造函數初始化player::id
struct player
{
char* name;
int* id;
player(): id(new int[5])
{}
...
};
(例如類的正確實施需要三個規則如下當然。)
或者你可以從外部初始化它。這裏的正確方法取決於你的意圖。
儘管我希望在可能缺少'std :: array'的情況下,除非OP明確指出銷燬是在'player's'dtor之外處理的,否則我建議您添加適當的實現。 – thokra
@thokra:不。OP明確指出這是一項「培訓」任務。儘管我不能完全猜測他們想學什麼,但原始語法建議通過結構指針引用分配的獨立數組。同時,'std :: array'會實現一個「嵌入」數組,這是完全不同的事情。 'std :: array'只是一個更加文明的'int id [5]'。由於他們從一開始就不使用'int id [5]',我認爲'std :: array'也不是「合適的實現」。 – AnT
@thokra:最有可能暗示的是,在一般情況下,數組大小不會由編譯時間常量指定,這就是爲什麼他們在運行時分配它的原因。這會立即排除'std :: array'的考慮。在這種情況下,原始數組的正確替換將是'std :: vector',而不是'std :: array'。然而,無論如何,我不想用基於絕望缺乏信息的猜測來混淆我的回答。我只是直接回答這個問題。 – AnT
接受一個答案plz – hasan83
@Kerrek SB:除了這種語法不是內聯初始值設定項的正確語法。 – AnT
今天的方法是'std :: array id',你的老師仍在使用字面上屬於20世紀的技術。 –
MSalters