我有以下头文件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 );
)
我收到以下错误:
错误:嵌套名称说明符中使用了不完整的类型'Helper'
任何帮助,将不胜感激。
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:将前向声明更改为包括。如果它很重要,在我的代码中添加了其他包含。
前向声明引入的类型是不完整类型。但是调用成员函数要求类型是完整的,否则编译器如何知道成员是否存在及其签名?
您需要包括头文件。
#include "helper.h"
int main(void){
float h = Helper::calculateSpriteSize( 168.0f, 170.0f );
)
编辑
您ADD_H
在“ block.h”和“ helper.h”中都使用了相同的宏。这意味着
#include "block.h"
#include "helper.h"
第二个包含会失败,helper.h
根本不会包含的内容。
将包含的保护宏名称更改为唯一,更好地使其与文件名一致。如HELPER_H
和BLOCK_H
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句