This is very hideous bug (took me at least quarter an hour (including the blogpost). Originaly it was structure keeping data only, later I added .cc file with implementation of Clone method. It did not compile…

// frame.h

#include <cstdint>

#include <opencv2/opencv.hpp>

namespace dove_eye {

struct Frame {
  typedef double Timestamp;
  typedef double TimestampDiff;

  Timestamp timestamp;
  cv::Mat data;

  Frame Clone() const;

} // namespace dove_eye

#endif // DOVE_EYE_FRAME_H_
#include "dove_eye/frame.h"

namespace dove_eve {

Frame Frame::Clone() const {
  Frame result(*this); = data.clone();
  return result;

} // namespace dove_eve

And compilers output:

/home/michal/school/dove-eye/git/dove-eye/lib/src/ error: ‘Frame’ does not name a type
 Frame Frame::Clone() {


Using namespace dove_eve. instead of namespace dove_eye.