【问题标题】:Expected class name before ',' or ';'',' 或 ';' 之前的预期类名
【发布时间】:2010-06-09 14:12:58
【问题描述】:

我在 , or 之前得到一个“预期的类名;我不太明白如何解决它。

这里是错误的地方:

class FXHost : public CPLAT::CP_Application, public CPLAT::CP_M_Listener 
{

该文件是 FXHost.h,而 CPLAT:: 显然是 CP_Application 和 CP_M_Listener 所在的命名空间。

我不明白为什么这是错误的。这段代码在 Metrowerks 中运行良好(没有 CPLAT::),但在 XCode 中,由于之前的开发人员编写代码的方式,需要 CPLAT。

谁能解释一下这个错误?

更新:这是 CP_Application 类的示例

template <class DOC_POLICY, class PRINT_POLICY, class UNDO_POLICY>
class CP_EXPORT CP_Application : public CP_Application_Imp
{
    public:
    typedef DOC_POLICY                  DocPolicyType;
    typedef PRINT_POLICY                PrintPolicyType;
    typedef UNDO_POLICY                 UndoPolicyType;

    CP_Application();
    virtual                 ~CP_Application() throw();

【问题讨论】:

  • 听起来好像缺少声明 CPLAT:: 类的 #include。

标签: c++ class namespaces compiler-errors


【解决方案1】:

编译器似乎没有看到两个父类的类声明。我要检查的第一件事是您的包含指令。您确定要包含定义 CP_ApplicationCP_M_Listener 类的标头吗?

【讨论】:

  • @acanaday - 这是其中的一部分。我添加了 CP_Application 和 CP_M_Listener,但它仍然抱怨 CP_M_Listener。我查看了该标头,并且 CP_M_Listener() 构造函数受到保护。为什么会有一个受保护的构造函数?这是我的问题吗?
  • @Elliot - 使构造函数受保护的目的是只有派生类(或静态类方法)可以调用它(即防止直接实例化类)。这通常是抽象基类或单例(更典型的是私有构造函数)的情况。这本身不应该导致编译器错误。你现在遇到什么错误?
  • @acanaday - 我现在的确切错误是:错误:',' 标记之前的预期类名 --
  • @Elliot - 看起来问题出在CP_Application,而不是CP_M_Listener。 ',' 标记之前的预期类名表示编译器仍未看到 CP_Application 的声明,因此在预期类名的位置出现未知符号(特别是在 public 和逗号之间) )。
  • @acanaday - 嗯,CP_Application 包括在内,这确实是类名.....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2015-01-19
  • 2017-02-19
相关资源
最近更新 更多