我有一个文件Dimension.h类Dimension
,我定义(如同我所有的类):是否可以在头文件中声明constexpr类并将其定义在单独的.cpp文件中?
class Dimension
{
public:
constexpr Dimension() noexcept;
constexpr Dimension(int w, int h) noexcept;
int width;
int height;
};
我以为我可以像在我所有的班,把定义在一个单独的Dimension.cpp :
#include "Dimension.h"
constexpr Dimension::Dimension() noexcept : width(0), height(0) {}
constexpr Dimension::Dimension(int w, int h) noexcept : width(w), height(h) {}
但是当我尝试使用类,编译器告诉我:
警告:使用内联函数“constexpr Dimension::Dimension()
”,但从未定义
和同时连接:
未定义提及 'pong::graphics::Dimension::Dimension()
'
(同与其他的构造函数)
如果我定义类在头像这样:
class Dimension
{
public:
constexpr Dimension() noexcept : width(0), height(0) {}
constexpr Dimension(int w, int h) noexcept : width(w), height(h) {}
int width;
int height;
};
并省略.cpp文件,一切工作正常。
我正在使用GCC 4.9.2。为什么单独的定义不起作用?
“constexpr”函数的要点是允许在编译时评估函数。如果编译器无法看到所述函数的主体,那么这将是相当困难的。 – 2014-12-07 17:13:12
_“为什么单独的定义不起作用?” - 因为语言不允许。接受它,正确地做,继续前进。 – 2014-12-07 17:13:14
我已经怀疑过,但我不太确定我是否可以解释(可能是参考)为什么它确切发生。我在Google上搜索时没有发现任何关于此的内容,所以我想出了一个新问题,因为这是合适的。 – 2014-12-07 17:19:28