עבור לתוכן

בעיה ב-cpp ואני ממש חייב את העזרה שלכם.

Featured Replies

פורסם

נתקלתי בבעיה ב-cpp , תוכן הבעיה - 2 הודעות שגיאה:

c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\cstdlib(17): error C2039: 'exit' : is not a member of 'operator``global namespace'''

c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\cstdlib(17): error C2873: 'exit' : symbol cannot be used in a using-declaration

כל הקבצים מתקמפלים בלי שום כל בעיה, מלבד קובץ אחד CGameHabdler.cpp

תוכן הקובץ:

#include "CPoint.h"

#include "CPolygon.h"

#include "CModel.h"

#include "CCube.h"

#include "Sun.h"

#include "Star.h"

#include "Pyramid.h"

#include "Hexagon.h"

#include "math.h"

#include "iostream"

//#include <stdio.h>

#include "CGameHandler.h"

#include "glut.h"

void renderBitmapString(float x, float y, void *font,char *string)

{

char *c;

glRasterPos2f(x, y);

for (c=string; *c != '\0'; c++) {

glutBitmapCharacter(font, *c);

}

}

CGameHandler::CGameHandler()

{

ScreenNumber = 1;

Score = 0;

SecondsLeft = 60;

migrash.MoveInX(-0.0);

migrash.ScaleY(9);

migrash.ScaleX(10);

migrash.RotateSelfX(0.8);

mySun.ScaleX(1.5);

mySun.ScaleY(1.5);

mySun.ScaleZ(1.5);

mySun.RotateSelfX(0.8);

mySun.MoveInZ(-6.5);

///////////////// cube - i star - j pyramid - k

for (int i = 0; i < 10; i++)

{

myCubeArray.ScaleX(0.3);

myCubeArray.ScaleY(0.3);

myCubeArray.ScaleZ(0.3);

myCubeArray.MoveInY(10);

myCubeArray.SetSpeed(0.01 + (float)i/200);

}

myCubeArray[0].MoveInX(1);

myCubeArray[0].MoveInZ(1);

myCubeArray[1].MoveInX(2);

myCubeArray[1].MoveInZ(-1);

myCubeArray[2].MoveInX(-2);

myCubeArray[2].MoveInZ(1.5);

myCubeArray[3].MoveInX(3);

myCubeArray[3].MoveInZ(-1.5);

myCubeArray[4].MoveInX(0);

myCubeArray[4].MoveInZ(-2);

myCubeArray[5].MoveInX(1);

myCubeArray[5].MoveInZ(1.8);

myCubeArray[6].MoveInX(-3);

myCubeArray[6].MoveInZ(-1);

myCubeArray[7].MoveInX(-2);

myCubeArray[7].MoveInZ(0);

myCubeArray[8].MoveInX(1.5);

myCubeArray[8].MoveInZ(-1.2);

myCubeArray[9].MoveInX(2.2);

myCubeArray[9].MoveInZ(1.3);

for (int j = 0; j < 15; j++)

{

myStarArray[j].ScaleX(0.02);

myStarArray[j].ScaleY(0.02);

myStarArray[j].ScaleZ(0.02);

myStarArray[j].MoveInY(0);

myStarArray[j].SetSpeed(0.01 + (float)j/200);

}

myStarArray[0].MoveInX(4);

myStarArray[0].MoveInZ(-10);

myStarArray[0].MoveInY(1);

myStarArray[1].MoveInX(-2.6);

myStarArray[1].MoveInZ(-10);

myStarArray[1].MoveInY(3);

myStarArray[2].MoveInX(-5);

myStarArray[2].MoveInZ(-10);

myStarArray[2].MoveInY(2.7);

myStarArray[3].MoveInX(3);

myStarArray[3].MoveInZ(-10);

myStarArray[3].MoveInY(3.1);

myStarArray[4].MoveInX(0);

myStarArray[4].MoveInZ(-10);

myStarArray[4].MoveInY(3.2);

myStarArray[5].MoveInX(5);

myStarArray[5].MoveInZ(-10);

myStarArray[5].MoveInY(-2.5);

myStarArray[6].MoveInX(-5);

myStarArray[6].MoveInZ(-10);

myStarArray[6].MoveInY(1.5);

myStarArray[7].MoveInX(-4);

myStarArray[7].MoveInZ(-10);

myStarArray[7].MoveInY(-2.7);

myStarArray[8].MoveInX(1.5);

myStarArray[8].MoveInZ(-10);

myStarArray[8].MoveInY(2);

myStarArray[9].MoveInX(2.2);

myStarArray[9].MoveInZ(-10);

myStarArray[9].MoveInY(-3.1);

myStarArray[10].MoveInX(-3.9);

myStarArray[10].MoveInZ(-10);

myStarArray[10].MoveInY(-4.1);

myStarArray[11].MoveInX(-5);

myStarArray[11].MoveInZ(-10);

myStarArray[11].MoveInY(5);

myStarArray[12].MoveInX(-4.2);

myStarArray[12].MoveInZ(-10);

myStarArray[12].MoveInY(0);

myStarArray[13].MoveInX(5);

myStarArray[13].MoveInZ(-10);

myStarArray[13].MoveInY(-1.0);

myStarArray[14].MoveInX(-2.2);

myStarArray[14].MoveInZ(-10);

myStarArray[14].MoveInY(-3.1);

for (int k = 0; k < 5; k++)

{

myPyramidArray[k].ScaleX(2);

myPyramidArray[k].ScaleY(2);

myPyramidArray[k].ScaleZ(2);

myPyramidArray[k].MoveInY(0);

//myPyramidArray[k].SetSpeed(0.01 + (float)k/200);

}

myPyramidArray[0].MoveInX(4);

myPyramidArray[0].MoveInZ(-10);

myPyramidArray[0].MoveInY(4);

myPyramidArray[1].MoveInX(-4);

myPyramidArray[1].MoveInZ(-10);

myPyramidArray[1].MoveInY(4);

myPyramidArray[2].MoveInX(-2);

myPyramidArray[2].MoveInZ(-10);

myPyramidArray[2].MoveInY(4);

myPyramidArray[3].MoveInX(0);

myPyramidArray[3].MoveInZ(-10);

myPyramidArray[3].MoveInY(4);

myPyramidArray[4].MoveInX(2);

myPyramidArray[4].MoveInZ(-10);

myPyramidArray[4].MoveInY(4);

}

void CGameHandler::DrawAllModels()

{

if (ScreenNumber == 2)

{

migrash.DrawModel();

//myPyramid.DrawModel();

mySun.DrawModel();

//myStar.DrawModel();

//myHexagon.DrawModel();

for (int i = 0; i < 10; i++)

{

myCubeArray.DrawModel();

}

for (int j = 0; j < 15; j++)

{

myStarArray[j].DrawModel();

}

for (int k = 0; k < 5; k++)

{

myPyramidArray[k].DrawModel();

}

}

}

void CGameHandler::LogicHandler()

{

if (ScreenNumber == 2)

{

timeb lTime;

ftime(&lTime);

elapsedTime = lTime.time - CurrentTime.time;

if (elapsedTime == 10)

{

ScreenNumber = 3;

}

float MySunCenetrX = mySun.GetXCenter();

float MySunCenetrY = mySun.GetYCenter();

float MySunCenetrZ = mySun.GetZCenter();

float MinimalDistance = 0.5 ;

for (int i = 0; i < 10; i++)

{

float CubeCenetrX = myCubeArray.GetXCenter();

float CubeCenetrY = myCubeArray.GetYCenter();

float CubeCenetrZ = myCubeArray.GetZCenter();

float distance = sqrt(pow(MySunCenetrX-CubeCenetrX,2) +

pow (MySunCenetrY - CubeCenetrY,2) + pow(MySunCenetrZ - CubeCenetrZ,2));

if ((distance < MinimalDistance) && (myCubeArray.GetHit() == false))

{

myCubeArray.SetHit(true);

Score++;

}

}

for ( i = 0; i < 10; i++)

{

if (myCubeArray.GetYCenter() < -1.6)

{

myCubeArray.SetHit(false);

myCubeArray.MoveInY(20);

}

myCubeArray.RotateSelfY(0.05);

myCubeArray.MoveInY(-myCubeArray.GetSpeed());

}

for (int j = 0; j < 15; j++)

{

myStarArray[j].RotateSelfY(0.05);

myStarArray[j].RotateSelfY(-myStarArray[j].GetSpeed());

}

myStar.RotateSelfY(0.01);

//void CGameHandler::WriteText()

}

}

void CGameHandler::KeyRightHandler()

{

mySun.MoveInX(0.1);

}

void CGameHandler::KeyLeftHandler()

{

mySun.MoveInX(-0.1);

}

void CGameHandler::KeyUpHandler()

{

float StepSize = 0.1;

mySun.MoveInZ(StepSize*(-cos(0.8)));

mySun.MoveInY(StepSize*sin(0.8));

//mySun.MoveInZ(-StepSize);

}

void CGameHandler::KeyDownHandler()

{

float StepSize = 0.1;

mySun.MoveInZ(StepSize*cos(0.8));

mySun.MoveInY(StepSize*(-sin(0.8)));

// mySun.MoveInY(-StepSize);

}

void CGameHandler::WriteText()

{

int ScreenSizeX = glutGet(GLUT_SCREEN_WIDTH);

int ScreenSizeY = glutGet(GLUT_SCREEN_HEIGHT);

if (ScreenNumber == 1)

{

renderBitmapString(ScreenSizeX/3,ScreenSizeY/10,GLUT_BITMAP_TIMES_ROMAN_24,

"Preaper for the unknown!!!");

renderBitmapString(ScreenSizeX/3,2*ScreenSizeY/10,GLUT_BITMAP_TIMES_ROMAN_24,

"Instructions: Your mission is catching the cubes which falling from the sky with the black hole by using the arrows keys for a movment! all you have is only 100 seconds, try to get the most. are you sure you ready ? ");

}

if (ScreenNumber == 2)

{

glColor3f(1,0,0);

char* ElapsedTimeText = new char[20];

itoa( elapsedTime,ElapsedTimeText,100);

renderBitmapString(ScreenSizeX/15,ScreenSizeY/10,GLUT_BITMAP_TIMES_ROMAN_24,"Elapsed Time:");

renderBitmapString(3*ScreenSizeX/15,ScreenSizeY/10,GLUT_BITMAP_TIMES_ROMAN_24,ElapsedTimeText);

char* ScoreText = new char[20];

itoa( Score,ScoreText,10);

renderBitmapString(10*ScreenSizeX/15,ScreenSizeY/10,

GLUT_BITMAP_TIMES_ROMAN_24,"Score:");

renderBitmapString(13*ScreenSizeX/15,ScreenSizeY/10,

GLUT_BITMAP_TIMES_ROMAN_24,ScoreText);

}

if (ScreenNumber == 3)

{

renderBitmapString(ScreenSizeX/3,ScreenSizeY/10,GLUT_BITMAP_TIMES_ROMAN_24,

"Game Over Man");

char* FinalScoreText = new char[20];

itoa( Score,FinalScoreText,10);

renderBitmapString(ScreenSizeX/15,3*ScreenSizeY/10,GLUT_BITMAP_TIMES_ROMAN_24,"Your Score:");

renderBitmapString(3*ScreenSizeX/15,3*ScreenSizeY/10,GLUT_BITMAP_TIMES_ROMAN_24,FinalScoreText);

renderBitmapString(ScreenSizeX/3,5*ScreenSizeY/10,GLUT_BITMAP_TIMES_ROMAN_24, "Press 'E' for Exit");

}

}

void CGameHandler::StartGame()

{

ftime(&CurrentTime);

ScreenNumber = 2;

}

void CGameHandler::ExitGame()

{

exit(0);

}

איך לפתור את הבעיות הללו? אני יודע שזה דבר יחסית "קטן" שיוצר המון בלגן.

תודה =)

אפיק.

פורסם

הניחוש שלי זה שחסר לך נקודה-פסיק ; או סוגר { בסוף אחד מקבצי ה-H שלך. יתכן ששכחת לסגור namespace שפתחת בקובץ H (מתאים להודעת השגיאה הראשונה). יתכן ששכחת ";" בסוף הגדרה, לדוגמא:

#ifndef _MY_FILE_H_
#define _MY_FILE_H_

// lots and lots of declarations

class CMyLongClass {
// bla bla bla
// lot of declerations here
// some inline functions?
// data memebers?
// when will this class end
} // OOPS!

#endif // end of _MY_FILE_H_

במקרה זה אין נקודה פסיק, וזה גורם להרבה שגיאות מוזרות.

פורסם

הבעיה היא כנראה מאוד לא בקובץ שצירפת.

כדי להימנע ממקרים שבהם הקומפיילר מודיע לך שיש בעיות באחת מהספריות הסטנדטיות, חשוב שסדר ה- include-ים יתחיל בספריות הסטנדרטיות (iostream, math), ימשיך בספריות האחרות שאתה משתמש בהן (glut) ורק אחרי זה הקבצים שלך.

יכול להיות שמספיק שתעשה בהם סדר כדי לפתור את הבעיה, אבל גם אם לא, זה יעזור לך למקד אותה.

פורסם
  • מחבר

ניסיתי את שתי ההמלצות וזה לא עזר ממש! למישהו יש עוד רעיון? אולי רעיונות אחרים? גם אם אתם לא בטוחים וחושבים שזה אולי יועיל - אני אשמח לשמוע.

פורסם

אחרי ששינית את סדר ה- include יש לך את אותן ההודעות בדיוק?

יכול להיות שיש לך איפשהו using std במקום using namespace std?

פורסם
  • מחבר

כן יש לי את אותה בעיה בדיוק גם אחרי ששינתי את הסדר! ו ולגבי ה-using std אז... זה תקין!

פורסם

using namespace std זה תקין.

using std זה לא תקין.

פורסם
  • מחבר

ידוע ידוע

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים