I have a class Dimension
which I defined (like all my classes) in a file Dimension.h:
class Dimension
{
public:
constexpr Dimension() noexcept;
constexpr Dimension(int w, int h) noexcept;
int width;
int height;
};
I thought I could, like in all my classes, put the definition in a separate 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) {}
But when I try to use the class, the compiler tells me:
warning: inline function 'constexpr Dimension::Dimension()
' used but never defined
and while linking:
undefined reference to 'pong::graphics::Dimension::Dimension()
'
(same with the other constructor)
If I define the class in the header like so:
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;
};
and omit the .cpp file, everything works fine.
I'm using GCC 4.9.2. Why does separate definition not work?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…