我試圖使用C SD驅動程序/文件系統libary(凱爾MDK),在C++ 11的項目。 Keil MDK 5.23中的Pack Manager增加了它。我與ARMCC編譯5.06u4
我得到警告class "_ARM_MCI_STATUS"
有沒有合適的拷貝構造函數」這是奇怪的,因爲它在聲明的頭有extern "C" {
。
默認情況下,該組沒有選項來設置它C或C++,但我已經手動添加的文件作爲C文件仍然是一個問題
的結構被聲明,內extern "C" {
爲:。
typedef volatile struct _ARM_MCI_STATUS {
uint32_t command_active : 1; ///< Command active flag
uint32_t command_timeout : 1; ///< Command timeout flag (cleared on start of next command)
uint32_t command_error : 1; ///< Command error flag (cleared on start of next command)
uint32_t transfer_active : 1; ///< Transfer active flag
uint32_t transfer_timeout : 1; ///< Transfer timeout flag (cleared on start of next command)
uint32_t transfer_error : 1; ///< Transfer error flag (cleared on start of next command)
uint32_t sdio_interrupt : 1; ///< SD I/O Interrupt flag (cleared on start of monitoring)
uint32_t ccs : 1; ///< CCS flag (cleared on start of next command)
uint32_t reserved : 24;
} ARM_MCI_STATUS;
當該結構是爲發生該問題[R在eturned:
static ARM_MCI_STATUS GetStatus (MCI_RESOURCES *mci) {
return mci->info->status;
}
凡status
被聲明爲ARM_MCI_STATUS status;
。我不明白爲什麼它應該是一個問題。
如果我編譯沒有--cpp,那麼它編譯沒有問題。
有什麼建議嗎?
僅僅因爲它被標記爲'extern「C」並不意味着它繞過了C++規則。 –
結構和類型名稱永遠不需要'extern「C」',只有函數可以。它所做的基本上是防止函數的[name-mangling](https://en.wikipedia.org/wiki/Name_mangling)。 –
@RickAstley我正在收集,雖然我是/不知道一個特定的C++規則需要一個基本的C位字段的複製構造函數。你知道嗎? – Flip