這似乎是一件小事,但我不是C++的專家,我還沒有找到一個好的在線解決方案。我懷疑我錯過了一些可能解決此問題的基本編碼結構。我在我的主頭文件一個如下定義:避免定義,但不使用靜態常量類
static const Foo INVALID_FOO = {};
其中Foo
是一個POD類(它不具有構造函數,因爲它是在聯合使用在C++ 03的項目)。這似乎很好,除了源,其中包括了頭,但不使用INVALID_FOO
,我收到了警告:
error: 'Foo::INVALID_FOO' defined but not used [-Werror=unused-variable]
我試圖消除static
但後來我得到重複的定義。我可以將它作爲前向聲明,並將其定義在.c文件中,但編譯器需要通過引用訪問它,並且無法進行任何優化。我也想不要禁用-Wall
編譯器標誌。我想知道是否有一個很好的方法來做到這一點?
我不知道C++ 17的內聯可以幫助嗎? – Bathsheba
您是否希望在每個[*翻譯單元*](https://en.wikipedia.org/wiki/Translation_unit_(編程))中定義「INVALID_FOO」?爲什麼不簡單地在頭文件中聲明*並在源文件中定義(它實際使用的地方)? –
@Someprogrammerdude:我幾乎按照「回答問題」的方式回答了這個問題,但我的印象是,OP意識到了這一點。 – Bathsheba