【问题标题】:How to instatiate a class from another class in Qt C++如何在 Qt C++ 中从另一个类实例化一个类
【发布时间】:2011-05-26 08:42:56
【问题描述】:

我在我的项目中做了 2 节课。我想使用从第一类到第二类的函数问题是我不能将第一类实例化到第二类。顺便说一下,这两个类都在不同的标头中声明。

这是一个示例代码:

标题 1:

class 1stclass{
   public:

   2ndclass *class2;
   void function1(QString parameter1)
   {
       QString str1;
       list = class2->function2(parameter1);
   }
};

标题 2:

class 2ndclass{
   public:

   QString function2(QString parameter2)
   {
       QString str2 = parameter2 + "hello"; 
       return str2;
   }
};

我想使用函数 2 中的函数,但它给了我一个错误。 这是错误消息:

  1. ISO C++ 禁止声明没有类型的“2ndclass”;
  2. 预期为 ';'在“*”标记之前;
  3. 'class2' 未在此范围内声明;

【问题讨论】:

  • 您是否将2ndclassheader 文件包含到1stclass 的头文件中?
  • 它是否包含之前 1stclass 的代码(即在顶部)?

标签: c++ qt


【解决方案1】:

类名在 C++ 中不允许以数字开头。

Class1Class2 是有效的名称。

【讨论】:

    【解决方案2】:

    编译器在尝试创建指针时对第二个类一无所知。你没有忘记在第二个类声明中包含头文件吗?该文件是否包含在您的 qt 项目文件或 Makefile 中?顺便说一句,标识符的第一个字符不能是数字,只能是 a-z 和下划线。

    【讨论】:

    • 我已经在头等舱中包含了二等舱的头文件,但仍然出现相同的错误..
    • 你的 Makefile 或 qt 项目文件中的所有文件吗?
    【解决方案3】:

    为什么不使用 .cpp 文件。 除非您包含标题,否则第一类无法知道第二类是什么。

    标题 2:

    class SecondClass
    {
    public:
        QString function2( const QString &parameter2 );
    };
    

    Cpp 2:

    SecondClass::function2( const QString &parameter2 )
    {
      // your func
    }
    

    标题 1: 您可以包含 header2.h 或使用前向声明,如

    class SecondClass;
    
    class FirstClass
    {
    public:
        QString function( const QString &parameter );
    
        SecondClass *s2;
    };
    

    Cpp 1:

    #include "SecondClass.h"
    
    FirstClass::function( const QString &parameter )
    {
        s2 = new SecondClass;
        QString str1;
        list = s2->function2(parameter1);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多