Ошибка C2676: двоичное ‘& lt; & lt;’: ‘std :: ostream’ не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора

Я не понимаю, ошибка компиляции C2676

для приведенного ниже кода

#ifndef __VEC_3D_H__
#define __VEC_3D_H__

#include <vector>
#include <cmath>

namespace Internal
{
/** very simple 3D vector/ point */
class Vec3D
{
public:
float mX;
float mY;
float mZ;

/// null constructor
Vec3D(void) {}

/// construct from data
Vec3D(float x, float y, float z) : mX(x), mY(y), mZ(z) {}

inline friend std::ostream& operator<< (std::ostream& os, const Vec3D& v)
{
os << "(" << v.mX << ", " << v.mY << ", " << v.mZ << ")";
return os;
}
};

}

#endif

Я поместил функционально идентичный код в другой класс, и он компилируется и работает нормально. Что здесь не так?

EDIT1: исправлено BOBVec3d для Vec3D, была опечатка

EDIT2: удалено using namespace Internal;, это действительно поражение точки, чтобы иметь его в заголовочном файле

0

Решение

+ Изменить BOBVec3d в Vec3D:

BOBVec3D(void) {}
BOBVec3D(float x, float y, float z) : mX(x), mY(y), mZ(z) {}
inline friend std::ostream& operator<< (std::ostream& os, const BOBVec3D& v);

в

Vec3D(void) {}
Vec3D((float x, float y, float z) : mX(x), mY(y), mZ(z) {}
inline friend std::ostream& operator<< (std::ostream& os, const Vec3D& v);
0

Другие решения

отсутствует #include <iostream> на вершине.

Починил это.
(О, какие ужасно ужасные ошибки компиляции в C ++ могут быть ..)

0