错误C2676二进制'<<':'std :: ostream'未定义此运算符或未转换为预定义运算符可接受的类型

时间:2018-11-22 11:13:03

标签: c++ operator-overloading

我不理解编译错误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;,将它放在头文件中确实很不方便

3 个答案:

答案 0 :(得分:2)

在顶部缺少#include <iostream>

解决了。 (哦,C ++中极其糟糕的编译错误可能是..)

答案 1 :(得分:1)

我遇到了这个错误

错误C2676二进制'<<':'std :: ofstream'没有定义此运算符 或转换为预定义可接受的类型 运算符Project2c ++ c:\ users \ dinga \ desktop \ practice项目 c ++ \ project2c ++ \ project2c ++ \ fruit.h

作为解决方案 我只是在定义该类的头文件中使用了#include <fstream> (ie fstream)。 这对我有用。

答案 2 :(得分: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);