Ошибка C2676 двоичного «<<»: «std :: ostream» не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора - PullRequest
0 голосов
/ 22 ноября 2018

Я не понимаю ошибку компиляции 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;, действительно, иметь точку в файле заголовка

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Изменить 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 голосов
/ 22 ноября 2018

отсутствует #include <iostream> вверху.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...