C++ C++;未声明的类实例标识符
因此,我试图编译我的代码,但编译器一直抱怨“'mysnake'未声明(首先使用此函数)”,但我声明了它。 这是我的Main.cpp,wehre它被声明了C++ C++;未声明的类实例标识符,c++,dev-c++,undeclared-identifier,C++,Dev C++,Undeclared Identifier,因此,我试图编译我的代码,但编译器一直抱怨“'mysnake'未声明(首先使用此函数)”,但我声明了它。 这是我的Main.cpp,wehre它被声明了 #include "Class.h" #include "Snake.h" int main(int argc, char* args[]){ Prog run; if((run.Init())==false){ return(1); } Snake mysnake; if(run.Lo
#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);
}
这就是让编译器抱怨的文件(AFAIK,这是第一个被编译的引用了“mysnake”的文件)
#包括“Class.h”
#包括
#包括“Snake.h”
bool Prog::Draw(){
std::stringstream消息;
垂直位置;
SDL_BlitSurface(图像,空,屏幕,空);
int s=mysnake.EndSnake();
消息在main
中声明了mysnake
这一事实不允许在Prog
中使用它。您可能希望将对mysnake的引用传输到Draw方法。
通过构造函数或方法调用
Prog run(mysnake);
run.draw();
或
mysnake
在main
中声明的事实不允许在Prog
中使用它。您可能希望将对mysnake的引用传输到Draw方法。
通过构造函数或方法调用
Prog run(mysnake);
run.draw();
或
在Draw
函数中,没有声明名为mysnake
的变量。该函数无法看到main
中声明的mysnake
,因为它是main
的本地变量。您需要将mysnake
对象传递给Draw
函数,以便它知道您是哪条蛇实际上是在谈论
为此,给Draw
一个类型为const Snake&
的参数,一个“对const Snake
的引用”(如果EndSnake
是非const
成员函数,则去掉const
):
在main
中调用Draw
时,请执行以下操作:
run.draw(mysnake);
现在,您的Draw
函数有一个名为snake
的变量,该变量是从main
传入的。由于参数是引用,因此它看到的snake
对象与main
中的对象完全相同。如果参数的类型是snake
而不是const snake&
,则n您可以从main
获取mysnake
的副本
一些额外的建议:
我们通常编写类似于(run.Init())==false的条件,就像!run.Init()
-它读起来好多了。Returning也通常写为return true;
,而不是return(true)
,但这取决于您。在您的Draw
函数中没有声明名为mysnake
的变量。该函数看不到在main
中声明的mysnake
,因为它是main
的本地变量。您需要将mysnake
对象传递给Draw
函数它知道你说的是哪条蛇
为此,给Draw
一个类型为const Snake&
的参数,一个“对const Snake
的引用”(如果EndSnake
是非const
成员函数,则去掉const
):
在main
中调用Draw
时,请执行以下操作:
run.draw(mysnake);
现在,您的Draw
函数有一个名为snake
的变量,该变量是从main
传入的。由于参数是引用,因此它看到的snake
对象与main
中的对象完全相同。如果参数的类型是snake
而不是const snake&
,则n您可以从main
获取mysnake
的副本
一些额外的建议:
我们通常编写类似于(run.Init())==false的条件,就像!run.Init()
-它读起来好多了。Returning也通常写为return true;
,而不是return(true);
,但这取决于您。您在一个函数中声明的内容不会在每个函数中传播。这会导致极端的名称冲突问题。chris刚才所说的,mysnake对象在该文件中是未知的。您在一个函数中声明的内容不会在每个函数中传播。这会导致极端的名称冲突问题。chris just说,mysnake对象在该文件中是未知的。谢谢,不知怎的,我认为类的实例在默认情况下是全局的…显然我错了:DThanks,不知怎的,我认为类的实例在默认情况下是全局的…显然我错了:D
run.draw(mysnake);