使用命名空间C ++时变量不明确

时间:2019-07-15 11:41:21

标签: c++ namespaces

Coordinates.h

namespace Coordinates
{
    class Coordinates
    {
    public:
        Coordinates(int x = 0, int y = 0) : x(x), y(y) {}

    private:
        int x;
        int y;
    };
}

Tile.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是不明确的。没有命名空间,程序不会给出任何错误。

1 个答案:

答案 0 :(得分:2)

您有一个命名空间Coordinates和一个类Coordinates,并且由于使用了using namespace,所以两个名称都在范围内。尽管向量元素类型不能是名称空间,但这在编译的特定阶段仍然是模棱两可的。

您的类Coordinates根本不需要位于命名空间Coordinates中。好的建议是将所有代码放入一个命名空间中,以“屏蔽”他人的代码-您可能希望将代码进一步组织到多个命名空间中,但是将每个类放在自己的命名空间中毫无益处,当然您不应该像这样重复使用他们的名字。