gpt4 book ai didi

C++ 类实例标识符未声明

转载 作者:行者123 更新时间:2023-11-28 00:49:51 24 4
gpt4 key购买 nike

因此,我正在尝试编译我的代码,但编译器一直提示“'mysnake' 未声明(首先使用此函数)”,但我声明了它。这是我的 Main.cpp,它已被声明。

#include "Class.h"
#include "Snake.h"

int main(int argc, char* args[]){
Prog run;
if((run.Init())==false){
return(1);
}
Snake mysnake;
if(run.LoadFiles()==false){
return(1);
}
run.MainLoop();
if(run.Draw()==false){
return(1);
}
run.CleanUp();
return(0);
}

这是让编译器提示的文件(据我所知,这是第一个对“mysnake”进行编译的引用的文件)

#include "Class.h"
#include<sstream>
#include "Snake.h"

bool Prog::Draw(){
std::stringstream message;
SDL_Rect position;
SDL_BlitSurface(image, NULL, screen, NULL);
int s=mysnake.EndSnake();
message<<"Your snake was "<<s<<" blocks long.";
msg=TTF_RenderText_Solid(font, message.str().c_str(), font_color);
if(msg==NULL){
return(false);
}
position.x=(WWIDTH-msg->w)/2;
position.y=(WHEIGHT-msg->h)/2;
SDL_BlitSurface(msg, NULL, screen, &position);
SDL_Flip(screen);
return(true);
}

我想了一个多小时,还是不明白为什么会这样。顺便说一句,我正在使用 Bloodshed Dev C++如果能提供帮助,我将不胜感激。

最佳答案

在你的 Draw 里面函数没有变量声明为 mysnake .该函数看不到 mysnakemain 中声明因为它是 localmain .你需要通过你的 mysnake反对 Draw功能,以便它知道您实际上在谈论哪条蛇。

为此,请给出 Draw const Snake& 类型的参数,“对 const Snake 的引用”(如果 const 是非 EndSnake 成员函数,则去掉 const):

bool Prog::Draw(const Snake& snake) {
// ...
}

当您调用 Draw 时在 main ,这样做:

run.draw(mysnake);

现在您的 Draw函数有一个名为 snake 的变量这是从main传入的.因为参数是引用,所以 Snake它看到的对象与 main 中的对象完全相同.如果参数的类型是 Snake而不是 const Snake& , 然后你会得到 mysnake 的拷贝来自 main .


一些额外的建议:

我们通常写这样的条件 (run.Init())==false正如!run.init() - 它读起来好多了。返回通常也写成return true; , 而不是 return(true); ,但这取决于您。

关于C++ 类实例标识符未声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14694107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com