2009-05-15 92 views
0

我试图在main.h声明一个方法是这样的:传递一个**类作为参数

void buildGraph(int gNum, Graph** gArray); 

凡格拉夫是一个类和我想要将指针传递到一个数组指向Graph对象的指针。

我收到错误消息:“图形尚未声明”。 即使我在页面的顶部有#include“graph.h”,并且我一直在使用 图类,所以我知道它的工作原理。

任何想法?

+0

该函数声明没有问题。问题应该是别人,你能发布整个代码吗? 你确定Graph不在命名空间中吗? – mentat 2009-05-15 06:39:30

回答

0

也许名称Graph是在一个命名空间?那个graph.h文件说什么 - 是顶层的Graph还是在一个名称空间语句中?

+0

我graph.h开始这样 //#包括 “main.h” 的#include 的#include 使用命名空间std; 类格拉夫 { 私人: \t INT MAXVAL; \t Vlist vertList; \t Elist edgeList; public: 这就是你在命名空间中的意思吗?我应该避免使用那样的命名空间吗?不使用它意味着我必须在每个标准函数之前使用std ::? 无论如何,当我将文本复制到这里时,我注意到问题在于我在我的graph.h文件中包含main.h。问题解决了。 谢谢! – Meir 2009-05-15 06:51:59

+1

不,在这里你可以在不使用std ::前缀的情况下制作std :: visible的所有内容。亚历克斯意味着你可以这样做:命名空间MyNamespace {class Graph {}; }; – sharptooth 2009-05-15 06:56:52

+0

我通常避免使用“命名空间foo;”因为它可能会让读者或代码的维护者感到困惑,但是,在所有命名空间中,std是可以使用这种方式的意义。 – 2009-05-15 13:31:25

3

很可能您在文件系统中有多个graph.h文件,并且包含错​​误的文件。如果是因为机密复制,删除不需要的副本,如果是因为与C++标准库或其他库标题相冲突,则应重新命名头文件以防止将来发生此类冲突。

1

这种情况的一种常见可能性是Graph.h中的一个不正确的包含警戒,可能是您正在使用的另一个头文件的残留。

也就是说,确保“的#ifndef GRAPH_H”你应该有Graph.h之类的行是真的什么是应该是...

(不过说真的,没有更多的信息回答这个问题很难...)。