在名称空间中使用正确的语法实现非成员重载运算符
Implement a non-member, overloaded operator, in a namespace, with correct syntax
免责声明:我是 c++ 编程的新手,我已经阅读了数十个论坛,但找不到我的具体问题的答案。
我在下面包含了 Point class 的头文件和定义文件,以及调用重载 ostream 来打印 Point 的主要函数。我找不到非成员重载运算符 << 定义的正确语法。如果我按照 pos 的方式使用它,我会收到错误消息:
未定义引用`Clustering::operator<<(std::ostream&, Clustering::Point const&)
如果我在 operator<< 之前添加 Clustering::,我会收到错误消息:
std::ostream& Clustering::operator<<(std::ostream&, const Clustering::Point&)' 应该在 'Clustering' 中声明
std::ostream &Clustering::operator<<(std::ostream &os, const ::Clustering::Point &point)
这段代码应该如何编写os?
Point.h 文件:
#ifndef CLUSTERING_POINT_H
#define CLUSTERING_POINT_H
#include <iostream>
namespace Clustering {
class Point {
int m_dim; // number of dimensions of the point
double *m_values; // values of the point's dimensions
public:
Point(int);
friend std::ostream &operator<<(std::ostream &, const Point &);
};
}
#endif //CLUSTERING_POINT_H
Point.cpp 文件:
#include "Point.h"
//Constructor
Clustering::Point::Point(int i)
{
m_dim = i;
m_values[i] = {0};
}
std::ostream &operator<<(std::ostream &os, const Clustering::Point &point) {
os << "Test print";
return os;
}
Main.cpp:
#include <iostream>
#include "Point.h"
using namespace std;
using namespace Clustering;`
int main() {
Point p1(5);
cout << p1;
return 0;
}
您需要将 std::ostream &operator<<
放在 Point.cpp
的 Clustering
命名空间中
namespace Clustering {
std::ostream &operator<<(std::ostream &os, const Clustering::Point &point)
{
// ...
}
}
免责声明:我是 c++ 编程的新手,我已经阅读了数十个论坛,但找不到我的具体问题的答案。
我在下面包含了 Point class 的头文件和定义文件,以及调用重载 ostream 来打印 Point 的主要函数。我找不到非成员重载运算符 << 定义的正确语法。如果我按照 pos 的方式使用它,我会收到错误消息:
未定义引用`Clustering::operator<<(std::ostream&, Clustering::Point const&)
如果我在 operator<< 之前添加 Clustering::,我会收到错误消息:
std::ostream& Clustering::operator<<(std::ostream&, const Clustering::Point&)' 应该在 'Clustering' 中声明 std::ostream &Clustering::operator<<(std::ostream &os, const ::Clustering::Point &point)
这段代码应该如何编写os?
Point.h 文件:
#ifndef CLUSTERING_POINT_H
#define CLUSTERING_POINT_H
#include <iostream>
namespace Clustering {
class Point {
int m_dim; // number of dimensions of the point
double *m_values; // values of the point's dimensions
public:
Point(int);
friend std::ostream &operator<<(std::ostream &, const Point &);
};
}
#endif //CLUSTERING_POINT_H
Point.cpp 文件:
#include "Point.h"
//Constructor
Clustering::Point::Point(int i)
{
m_dim = i;
m_values[i] = {0};
}
std::ostream &operator<<(std::ostream &os, const Clustering::Point &point) {
os << "Test print";
return os;
}
Main.cpp:
#include <iostream>
#include "Point.h"
using namespace std;
using namespace Clustering;`
int main() {
Point p1(5);
cout << p1;
return 0;
}
您需要将 std::ostream &operator<<
放在 Point.cpp
Clustering
命名空间中
namespace Clustering {
std::ostream &operator<<(std::ostream &os, const Clustering::Point &point)
{
// ...
}
}