C++ 类实例标识符未声明
Posted
技术标签:
【中文标题】C++ 类实例标识符未声明【英文标题】:C++ class instance identifier undeclared 【发布时间】:2013-02-04 19:32:38 【问题描述】:所以,我正在尝试编译我的代码,但编译器一直抱怨“'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);
这是让编译器抱怨的文件(AFAIK,它是第一个引用 '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++ 非常感谢您的帮助。
【问题讨论】:
您在一个函数中声明的内容不会传播到每个函数中。这会导致极端的名称冲突问题。 chris 刚才说的,mysnake 对象在那个文件中是未知的。 【参考方案1】:在您的 Draw
函数中,没有声明名为 mysnake
的变量。该函数看不到在main
中声明的mysnake
,因为它是main
的本地。您需要将您的 mysnake
对象传递给 Draw
函数,以便它知道您实际上在谈论的是哪条蛇。
为此,给Draw
一个const Snake&
类型的参数,一个“对const Snake
的引用”(如果EndSnake
是一个非const
成员函数,则去掉const
):
bool Prog::Draw(const Snake& snake)
// ...
当您在main
中调用Draw
时,请执行以下操作:
run.draw(mysnake);
现在您的Draw
函数有一个名为snake
的变量,它是从main
传入的。因为参数是一个引用,所以它看到的Snake
对象与main
中的对象完全相同。如果参数的类型是 Snake
而不是 const Snake&
,那么您会从 main
获得 mysnake
的副本。
一些额外的建议:
我们通常将(run.Init())==false
之类的条件写成!run.init()
- 它读起来要好得多。 Returning 通常也写成return true;
,而不是return(true);
,但这取决于你。
【讨论】:
谢谢,不知何故,我知道类的实例默认是全局的......显然我错了:D【参考方案2】:mysnake
在main
中声明这一事实不允许在Prog
中使用它。您可能希望将对 mysnake 的引用传递给 Draw 方法。
通过构造函数或者通过对方法的调用。
Prog run(mysnake);
run.draw();
或
run.draw(mysnake);
【讨论】:
以上是关于C++ 类实例标识符未声明的主要内容,如果未能解决你的问题,请参考以下文章
C++ Visual Studio 2008 中未声明的标识符
在Visual Studio中使用C ++类 - 未声明的标识符错误[重复]
我在 Visual Studio C++ 中遇到这些错误:“NuovoUtente”:未声明的标识符和“CercareUtente”:未声明的标识符 [关闭]