如何在Qt C ++中从另一个类实例化一个类

时间:2011-05-26 08:42:56

标签: c++ qt

我在我的项目中做了2课。我想使用从第1类到第2类的函数问题是我无法将第1类实例化为第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'未在此范围内声明;

3 个答案:

答案 0 :(得分:5)

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

Class1Class2虽然是有效的名称。

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

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

标题2:

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

Cpp 2:

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

标题1: 您可以包含h​​eader2.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);
}