【发布时间】:2019-07-15 11:41:21
【问题描述】:
坐标.h
namespace Coordinates
{
class Coordinates
{
public:
Coordinates(int x = 0, int y = 0) : x(x), y(y) {}
private:
int x;
int y;
};
}
平铺.h
#include "Coordinates.h"
#include <vector>
namespace Tile
{
using namespace Coordinates;
class Tile
{
private:
std::vector <Coordinates> coordTile;
};
}
在第二个标题 Tile.h 上,它在 std::vector <Coordinates> coordTile; 处说 Tile::Coordinates 是模棱两可的。如果没有命名空间,程序不会给出任何错误。
【问题讨论】:
-
歧义是因为您将类命名为与命名空间相同的东西。如果您将 CamelCase 用于类,而将所有小写字母用于命名空间,则很容易避免这种情况。
-
using namespace Coordinates;在标题中。非常糟糕的主意 -
我建议您的命名空间可能会进一步简化,如果您将它们都放入 "MyGraphicsLib" ;如果你有 1 个命名空间/类,那么你有点打败命名空间的意义
-
由于名称冲突,您必须消除歧义:
std::vector <::Coordinates::Coordinates> coordTile; -
@OvidiuFirescu “有人建议我将我的类包装在它自己的命名空间中”我认为这是一些错误的沟通;它应该在“A 命名空间”中 - 也许。小型项目的全局命名空间没有任何问题
标签: c++ namespaces