我已經搜索了一個答案的stackoverflow,但是我無法得到相關的東西。在C++中使用標記進行靜態結構初始化
我試圖通過指定的標籤來初始化初始值的靜態結構實例,但我會在編譯時錯誤:
src/version.cpp:10: error: expected primary-expression before ‘.’ token
下面的代碼:
// h
typedef struct
{
int lots_of_ints;
/* ... lots of other members */
const char *build_date;
const char *build_version;
} infos;
錯誤代碼:
// C
static const char *version_date = VERSION_DATE;
static const char *version_rev = VERSION_REVISION;
static const infos s_infos =
{
.build_date = version_date, // why is this wrong? it works in C!
.build_version = version_rev
};
const infos *get_info()
{
return &s_infos;
}
因此,基本思想是繞過「其他成員」初始化,並只設置相關的build_date
和build_version
值。 這用於C工作,但我不明白爲什麼它不會在C++中工作。
任何想法?
編輯:
我意識到這代碼看起來簡單的C,它實際上是。整個項目是在C++中,所以我必須使用C++文件擴展名來防止生成文件依賴性混亂(%.o: %.cpp
)
*爲什麼這是錯的?它適用於C!*主要是因爲C和C++是*不同的*語言。 – 2011-04-26 13:02:52
@David - 但有足夠的共同點,並且有一個來源於另一個,並且持續分享想法,因此強調混淆是不公平的。 C99的某些部分已經被導入到C++ 0x中,比如「long long」。 – Steve314 2011-04-26 13:14:14
@ Steve314:不要誤解我的意思,我沒有在困惑中強調(我沒有被強調),但是在這個問題上沒有混淆:他知道他們是不同的語言!當人們說因爲一個特性在C++中有效*它能夠在C++中工作時,我覺得它很有趣。考慮這一點,或'void f(int x){int array [x]; 「他們是不同的語言,儘管他們有共同的過去,但他們並不總是分享未來。 – 2011-04-26 18:38:54