c ++ .h包含类和从一个类传递到另一类的.cpp

时间:2018-10-08 23:07:27

标签: c++

c ++的新手很难理解继承类何时会破坏编译器,因此我试图构造一个播放器类并将其传递给核心类,然后使用核心类来创建对象

错误:

./core.h:6:12: error: expected unqualified-id
class Core public: Player {
           ^
app.cpp:6:8: error: variable has incomplete type 'Core'
  Core core;
       ^
./core.h:6:7: note: forward declaration of 'Core'
class Core public: Player {

app.cpp

#include "core.h"

int main()
{
  Core core;
  core.Player(..);
  core.Player(..);
  std::cout << core.GetStringValue(..);
}

Player.cpp

#include "core.h"
#include "PlayerKeys.h"

class Player {
  private:
     .... initialized variables
  public:
    ... functions 
   One function calls a function from Core.Datetime
}

core.h

#ifndef Core_H
#define Core_H
class Core public: Player {
  public:
    ...
};

#endif

core.cpp

class Core{

  public:
  std::string DevlopmentTeamAccessDailyHash(){
    ...
  }
  std::sting SystemAccessActiveHash(){
    ...
  }
  std::string CurrentDateAndTime(){
    ...
  }

}

2 个答案:

答案 0 :(得分:0)

class Core : public Player {

只要将冒号公开。一个简单的语法错误。同样不要忘记在player.h中包含core.h(如果Player类声明仅位于.cpp文件中,则可能必须将Player类声明移至头文件中。)

答案 1 :(得分:0)

您的core.cpp和player.cpp文件包含类声明。它们不用于类声明。它们应该包含类定义。

例如您的core.cpp应该看起来像这样。

#ifndef Core_H
#define Core_H
class Core : public Player //note that you place the : in wrong place
{
public:
  Core(); 
  std::string DevlopmentTeamAccessDailyHash(); 
    ...
};

#endif

您的标题看起来像这样

Player

编辑:您在注释中提到您想通过Core将一些参数传递给core.Player(..);的构造函数

我想这就是您要对此通话进行的操作。

core.Player::Player(your arguments)

此调用不是调用播放器构造函数的有效方法。 您也许可以做Core,但这又不是OOP的工作原理。

相反,您可以修改 Core::Core(parameters ...); 构造函数,使其采用所需的所有参数

在头文件(Core.h)中

 Core::Core(parameters ...)
 {
   Player::Player(parameters passed as arguments...);
   //do core stuff..
 }

在cpp文件(Core.cpp)中

AsyncTask