C ++错误:嵌套名称说明符中使用的不完整类型

时间:2016-08-09 03:09:50

标签: c++ compiler-errors incomplete-type

我有以下标题helper.h:

#ifndef ADD_H
#define ADD_H

class Helper{
public:
    static float calculateSpriteSize(float imgSize, float screenSize);
};

#endif

这是我的helper.cpp:

#include "block.h"
#include "helper.h"

float Helper::calculateSpriteSize(float imgSize, float screenSize)
{
    return ((imgSize/screenSize)*100);
}

但是,出于某种原因,当我在运行的代码上调用我的函数calculateSpriteSize时:

#include "header.h"


int main(void){
     float h = Helper::calculateSpriteSize( 168.0f, 170.0f );
)

我收到以下错误:

  

错误:类型不完整'助手'用于嵌套名称说明符

任何帮助都将不胜感激。

Block.h如下所示:

#ifndef ADD_H
#define ADD_H

class Block{
    private:
         int imgID;
         int life;
         float price;

    public:
         Block();

         void setImgID(int imgID);
         int getImgID();
    };

    #endif

block.cpp如下所示:

#include "block.h"

Block::Block()
{

}

void Block::setImgID(int imgID)
{
     this->imgID = imgID;
}

int Block::getImgID()
{
    return imgID;
}

更新:我按照Rakete1111的建议将Helper添加到类定义中。但这并没有解决问题。

更新2:更改了前向声明以包含。添加了我的代码中的其他包含,以防其重要。

1 个答案:

答案 0 :(得分:5)

前向声明引入的类型是incomplete type。但是成员函数调用要求类型完整,否则编译器如何知道成员是否存在及其签名?

您需要包含头文件。

#include "helper.h"

int main(void){
     float h = Helper::calculateSpriteSize( 168.0f, 170.0f );
)

修改

您在“block.h”和“helper.h”中使用相同的宏ADD_H。这意味着

#include "block.h"
#include "helper.h"

第二个包括失败,helper.h的内容根本不会包括在内。

将包含保护宏名称更改为唯一,以使其更符合文件名的名称。例如HELPER_HBLOCK_H