Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 战无不胜框架,并接受伤害等级_C++_Sfml - Fatal编程技术网

C++ 战无不胜框架,并接受伤害等级

C++ 战无不胜框架,并接受伤害等级,c++,sfml,C++,Sfml,我是一个初学者,我已经读过一篇博士论文,但我需要通过练习来学习,现在我被卡住了 所以我想做一个类takeDommage来应用一些dmg,并激活一个倒计时来创建无敌框架 所以我尝试了这个(参见下面的代码) 这是我自己创建的第一个类,所以我不知道出了什么问题 主要内容: if(Collision::PixelPerfectTest(sprite_perso,sprite_ennemis)) { std::cout<<"collision pp"<<std::endl;

我是一个初学者,我已经读过一篇博士论文,但我需要通过练习来学习,现在我被卡住了

所以我想做一个类takeDommage来应用一些dmg,并激活一个倒计时来创建无敌框架

所以我尝试了这个(参见下面的代码)

这是我自己创建的第一个类,所以我不知道出了什么问题

主要内容:

if(Collision::PixelPerfectTest(sprite_perso,sprite_ennemis))
{
    std::cout<<"collision pp"<<std::endl;
    takeDommage::prendreDegat(10);
    std::cout<<pv<<std::endl;
}

在C++中你似乎很新。编译器已经告诉你它有什么问题了。
错误:无法在没有对象的情况下调用成员函数“int takedomage::prendreDegat(int)”

你需要先实例化(创建)你的对象。您访问takeDommage函数的方式就像takeDommage函数是一个静态函数,而不是。它的公共功能是takeDamage的一个成员函数

假设您在if语句调用之前的某个地方实例化了takeDommage类

TakeDommage Obj;
...
...
if(Collision::PixelPerfectTest(sprite_perso,sprite_ennemis))
{
    std::cout<<"collision pp"<<std::endl;
    Obj.prendreDegat(10); //calling the prendredegat member function of Obj
    std::cout<<pv<<std::endl;
}

takedomage::prendreDegat
是一种实例方法。正如错误消息所说,您需要一个对象来调用它,即,
takeDommage td=。。。;td.prendreDegat(10)
您当前试图调用它,好像它是
静态的
。好的,我正在尝试,但idk如何做^^“if语句放在哪里?if(collision…)在游戏循环的主循环中,if(takeDommage…)在takeDommage中。现在我有一个“error:'pv'未在此范围内声明”"但是我已经在缅因州声明了pv,如果不查看所有内容,我就不知道为什么。我非常确定pv不在if语句所在的可访问范围内。if语句是否在缅因州?最好编辑您的问题并添加缺少的部分codes@Jules变量受定义它们的范围的约束。变量在
main
中,仅在
main
中可见。在
main
中的
for
循环中定义的变量仅在该
for
循环中可见。我建议不要编辑该问题以添加另一个问题。该问题切中要害,具体且回答正确。添加更多问题会拓宽问题的范围如果一个答案产生了新的问题,那么就提出新的问题。@Jules,正如user4581301提到的,如果没有帮助,最好再问另一个问题。从编辑中,我可以告诉你,全局
pv
变量无法访问的原因是我t超出范围。
pv-=Dommage;导致问题。
。快速修复方法是将pv作为另一个参数传递给prendreDegat。如果这样做,请确保也更改当前的prendreDegat声明。例如;
void takeDommage::prendreDegat(int-Dommage,int-pv)
#include "takeDommage.h"

takeDommage::takeDommage()
{

}

void takeDommage::prendreDegat(int Dommage)
{
    if(takeDammageClock.getElapsedTime().asSeconds()>=3)
        {
            std::cout << "bite" << std::endl;
            pv -= Dommage;
            takeDammageClock.restart();
        }
}
||=== Build: Debug in TheGameSFML (compiler: GNU GCC Compiler) ===|
E:\Work\Top_secret\code\TheGame\main.cpp||In function 'int main()':|
E:\Work\Top_secret\code\TheGame\main.cpp|168|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
E:\Work\Top_secret\code\TheGame\main.cpp|180|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
E:\Work\Top_secret\code\TheGame\main.cpp|217|error: cannot call member function 'int takeDommage::prendreDegat(int)' without object|
E:\Work\Top_secret\code\TheGame\main.cpp|156|warning: unused variable 'enemySpawnTimer' [-Wunused-variable]|
E:\Work\Top_secret\code\TheGame\src\takeDommage.cpp|8|error: prototype for 'void takeDommage::prendreDegat(int)' does not match any in class 'takeDommage'|
include\takeDommage.h|15|error: candidate is: int takeDommage::prendreDegat(int)|
||=== Build failed: 3 error(s), 3 warning(s) (0 minute(s), 0 second(s)) ===|
TakeDommage Obj;
...
...
if(Collision::PixelPerfectTest(sprite_perso,sprite_ennemis))
{
    std::cout<<"collision pp"<<std::endl;
    Obj.prendreDegat(10); //calling the prendredegat member function of Obj
    std::cout<<pv<<std::endl;
}
class takeDommage
{
    public:
        takeDommage();
        //prendreDegat(int Dommage); //missing void
        void prendreDegat(int Dommage); //correct way. which can be translated as Prendredegat returns nothing.