簡體   English   中英

當別名定義為“const int alias = variable”而不是#define時使用ifndef時重新定義錯誤

[英]Redefinition error when using ifndef when alias is defined like “const int alias = variable” instead of #define

我定義const UInt8 HE = he; ports.h中的namespace Ports內。 然后我將它包含在ports_logic.hports_logic.h中,我在namespace Ports中有以下代碼

#ifndef HP
const UInt8 HP = hp;
#endif

但是在編譯期間,它給了我以下錯誤。

在此處輸入圖像描述

ifndef的替代方法可以幫助我檢查是否已經定義了const int HP

謝謝。

簡而言之, const UInt8 HP = hp; 沒有引入#ifndef HP可以對其作出反應的預處理器標識符。

通過#define預處理器指令定義的標識符和變量的定義是兩個不同的東西。 預處理器指令在編譯器分析代碼並識別變量、函數等之前被擴展。因此,變量的定義不能#define預處理器的標識符,因為此時已經進行了預處理。

你可以通過寫作來克服這個...

#ifndef HP_VAR
  #define HP_VAR
  const UInt8 HP = hp;
#endif

您混淆了預處理器和編譯器。 聲明 C++ 變量不會在預處理器中定義任何內容。 讓我們逐行看:

#ifndef HP

這由預處理器處理。 失敗的唯一方法是通過#define HP或類似方法。 C++ 編譯器永遠不會看到這一行。

const UInt8 HP = hp;

這是由 C++ 編譯器預處理器完成其工作后處理的。 預處理器忽略這一行。

沒有直接的方法可以做你想做的事; 理想的解決方案是以永遠不會多次聲明HP的方式安排您的項目。 它應該在單個翻譯單元中聲明,並在 header 文件中顯示為extern

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM