C ++继承类没有显示默认构造函数

时间:2014-05-22 20:28:25

标签: c++ inheritance

我正在创建一些类,我决定创建一个基本类,其他类将继承该基本类

所以这是我的基本类标题

#pragma once

#include "ImageService.h"

class State
{
public:
    State( ImageService& is );
    ~State();

    void Update();

};
不要担心这些方法,它们不是问题所在。 所以现在我继续创建一个类似的IntroState(头文件)

#pragma once

#include "State.h"

class IntroState : public State
{
public:
    IntroState(ImageService& imageService);
    ~IntroState();

    GameState objectState;
};

这里是cpp文件

#include "IntroState.h"


IntroState::IntroState(ImageService& imageService)
{
    //error here
}


IntroState::~IntroState()
{
}

在构造函数中它表示"没有类" State""的默认构造函数,现在我认为正在进行的是,State的默认构造函数需要传递一个imageService引用它。那么我如何将此构造函数中的imageservice传递给状态构造函数?

3 个答案:

答案 0 :(得分:7)

您的基类没有默认构造函数,这是在当前派生类构造函数中隐式调用的。您需要显式调用base的构造函数:

IntroState::IntroState(ImageService& imageService) : State(imageService)
{

}

答案 1 :(得分:3)

通常的方式:

IntroState::IntroState(ImageService& imageService)
    : State(imageService)
{
}

答案 2 :(得分:1)

您也应该调用State的构造函数,如下所示:

IntroState::IntroState(ImageService& imageService)
    : State(imageService) {
}

提示:不要使用:

#pragma once,使用警卫!

示例:

#ifndef GRANDFATHER_H
#define GRANDFATHER_H

class A {
    int member;
};

#endif /* GRANDFATHER_H */

您可以在wikipedia中了解有关包含警卫的更多信息。

您看到#pragma 不是标准。两者都没有进入C++11link)。