我有以下标题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:更改了前向声明以包含。添加了我的代码中的其他包含,以防其重要。
答案 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_H
和BLOCK_H
。