这似乎是一件小事,但我不是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