我经过大量努力(详情请见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
函数下方)所以不应该将Graph_lib::
用于 Polygon 。但实际上没有使用它我得到模糊符号错误。甚至我删除了该语句(using namespace Graph_lib;
)我没有得到任何错误。我的问题是,为什么该声明不适用于该代码,我必须使用Graph_lib::
?
答案 0 :(得分:5)
您很可能还有其他名为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.
}
在输出中:
错误:对'Bar'的引用含糊不清
这是using namespace X
反成语陷阱的一个很好的例子。这确实应该避免,或者至少局限于最小的范围。
答案 1 :(得分:0)
可能,在全局命名空间中声明了另一个Polygon,或者在某些命名空间中,您已经使用&#34; (比如你在另一个包含的标题中有using namespace XXX;
,这不是一个好习惯,并且声明了XXX::Polygon
之类的内容。
我可以建议你作为一个快速解决方案(如果你真的想使用Graph_lib&#39;多边形而没有&#34; Graph_lib ::&#34;,是
using Graph_lib::Polygon;
代替(或旁边)
using namespace Graph_lib;