gpt4 book ai didi

c++ - 为什么在我的 C++ 项目中使用命名空间不起作用?

转载 作者:行者123 更新时间:2023-11-30 01:19:12 24 4
gpt4 key购买 nike

经过巨大的努力,我可以(详情在这里FLTK version 1.3.2, Visual studio 2012 and the first example of Stroustrup's PPP book)运行下面的代码;

#include <Simple_window.h>    
#include <Graph.h>

//*********************************************

int main()
{
using namespace Graph_lib;

Point tl(100,100);
Simple_window win(tl,600,400,"Canvas");


Graph_lib::Polygon poly;
poly.add(Point(300,200));
poly.add(Point(350,100));
poly.add(Point(400,200));
win.attach(poly);


win.set_label("Canvas");
win.wait_for_button();
}

但对于 Polygon poly; 我应该使用 Graph_lib::,因为我在顶部添加了语句 using namespace Graph_lib;代码主体的一部分(就在 main 函数下方),因此不需要为 Polygon 使用 Graph_lib::。但实际上,如果不使用它,我会得到 ambiguous symbol 错误。甚至我删除了该语句 (using namespace Graph_lib;) 我也没有收到任何错误。我的问题是,为什么该语句不适用于该代码,而我必须使用 Graph_lib::

最佳答案

您很可能还有其他名为 Polygon 的东西。命名空间的存在是为了避免此类问题。

这是一个简化的例子:

namespace Foo
{
struct Bar {};
}

void Bar() {}

int main()
{
using namespace Foo; // I really really know what I am doing, seriously!
Bar b; // Oh dear.
}

在输出中:

error: reference to 'Bar' is ambiguous

这是 using namespace X 反习语陷阱的一个很好的例子。这确实应该避免,或者至少限制在最小的范围内。

关于c++ - 为什么在我的 C++ 项目中使用命名空间不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21216565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com