【问题标题】:Passing a **Class as an argument传递 **Class 作为参数
【发布时间】:2009-05-15 06:37:00
【问题描述】:

我正在尝试像这样在 main.h 中声明一个方法:

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

其中 Graph 是一个类,我正在尝试将指针传递给指向 Graph 对象的指针数组。

我收到错误消息:“图表尚未声明”。 即使我在页面顶部有 #include "graph.h" 并且我一直在使用 到目前为止,图形类很多,所以我知道它有效。

有什么想法吗?

【问题讨论】:

  • 那个函数声明没有问题。问题应该是别的,你能发布整个代码吗?你确定 Graph 不在命名空间中吗?

标签: c++ class


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    也就是说,确保您在 Graph.h 中应该有的类似“#ifndef GRAPH_H”的行确实​​是它应该是的......

    (但实际上,如果没有更多信息来回答这个问题……很难)。

    【讨论】:

      【解决方案3】:

      也许名字 Graph 在命名空间中?该 graph.h 文件说明了什么 - 是顶层的 Graph,还是在命名空间语句中?

      【讨论】:

      • 我的 graph.h 像这样开始 //#include "main.h" #include #include using namespace std;类图{私人:int maxVal; Vlist 垂直列表;列出边缘列表; public:这就是你在命名空间中的意思吗?我应该避免使用这样的命名空间吗?不使用它是否意味着我必须在每个标准函数之前使用 std:: ?无论如何,当我将文本复制到这里时,我注意到问题是我在我的 graph.h 文件中包含了 main.h。问题解决了。谢谢!
      • 不,在这里您可以在不使用 std:: 前缀的情况下使 std:: 的所有内容可见。亚历克斯的意思是你可以有这样的东西:namespace MyNamespace { class Graph {}; };
      • 我通常避免“使用命名空间 foo;”因为它可能会让代码的读者或维护者感到困惑,但是,在所有命名空间中,std 是使用这种方式有意义的命名空间。
      猜你喜欢
      • 1970-01-01
      • 2013-12-12
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 2017-01-05
      • 2016-04-08
      • 1970-01-01
      相关资源
      最近更新 更多