相关疑难解决方法(0)

C++中的命名空间和运算符重载

在特定命名空间中创建库时,为该命名空间中的类提供重载操作符通常很方便.看来(至少用g ++),重载的运算符可以在库的命名空间中实现:

namespace Lib {
class A {
};

A operator+(const A&, const A&);
} // namespace Lib
Run Code Online (Sandbox Code Playgroud)

或全局命名空间

namespace Lib {
class A {
};
} // namespace Lib

Lib::A operator+(const Lib::A&, const Lib::A&);
Run Code Online (Sandbox Code Playgroud)

从我的测试来看,它们似乎都运行良好.这两个选项之间是否存在实际差异?两种方法都更好吗?

c++ namespaces operator-overloading

36
推荐指数
2
解决办法
2万
查看次数

undefined对operator <<的引用

我有一个常规类(不是模板,也就是说)与私人朋友运营商<<

它的声明是:

std::ostream& operator<<(std::ostream& out, const Position& position);
Run Code Online (Sandbox Code Playgroud)

在cpp文件中,它的定义是:

std::ostream& operator<<(std::ostream& out, const Position& position)
{
  out << position.getXPoint() << "," << position.getYPoint();
  return out;
}
Run Code Online (Sandbox Code Playgroud)

它正在编译然后链接到使用它的main函数,但是当我使用它时,我得到一个未定义的引用...

但是,当我将定义添加到主cpp文件的顶部并删除友元声明时,它工作正常...

继承人我在主要功能中如何使用它

std::cout << node->getPosition() << std::endl;
Run Code Online (Sandbox Code Playgroud)

不多也不少......

继承人错误

/home/luke/Desktop/pathfinder/parse_world.cpp:34:对`pathfinder :: operator <<(std :: ostream&,pathfinder :: Position const&)'的未定义引用

并且继承了班级头...

#ifndef PATHFINDER_H
#define PATHFINDER_H
#include <ostream>
#include <istream>
#include <list>
#include <vector>
#include <stdexcept>
#include <cstring>
namespace pathfinder
{
class Node;
typedef unsigned int GCost;
typedef std::vector<std::vector<Node*> > World;
typedef std::vector<Node*> WorldRow;
class Position …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading operators

11
推荐指数
1
解决办法
2万
查看次数

标签 统计

c++ ×2

operator-overloading ×2

namespaces ×1

operators ×1