problēma

Vēlies radīt spēli, bet nezini ar ko sākt? Sperot pirmos soļus, vari meklēt padomu šeit
Message
Author
User avatar
kristapuciitis
Posts: 163
Joined: 03 Jun 2011, 14:22

Re: problēma

#21 Post by kristapuciitis » 15 Feb 2012, 22:45

bubu wrote: Es neticu, ka aizkomentējot Level::Load, tad programma strādā. Tas nav iespējams. Jo tu nekur NEIZSAUC Level::Load metodi.
Bet tā IR! Es arī nezinu, kas notika, man agrāk tā nekad nav bijis.

Code: Select all

void Level::Load(const char* fileName)
{
	 ifstream file(fileName);
	 if (!file.is_open())
		 return;
	 std::string buffer;
	 int iLine = 0;
	 while (!file.eof())
	 {
		 getline(file, buffer);
		 for (unsigned int i = 0; i < buffer.size(); i++)
		 {
			 switch(buffer[i])
			 {
			 case 'n':
				 cells[i][iLine].Type = CELL_TYPE_NONE;
				 break;
			 case 'g':
				 cells[i][iLine].Type = CELL_TYPE_GROUND;
				 break;
			 }
		 }
		 iLine++;
	 }
	 _width = buffer.size();
	 _height = iLine;
};
Šitā neiet.

Code: Select all

void Level::Load(const char* fileName)
{
	/*
	 ifstream file(fileName);
	 if (!file.is_open())
		 return;
	 std::string buffer;
	 int iLine = 0;
	 while (!file.eof())
	 {
		 getline(file, buffer);
		 for (unsigned int i = 0; i < buffer.size(); i++)
		 {
			 switch(buffer[i])
			 {
			 case 'n':
				 cells[i][iLine].Type = CELL_TYPE_NONE;
				 break;
			 case 'g':
				 cells[i][iLine].Type = CELL_TYPE_GROUND;
				 break;
			 }
		 }
		 iLine++;
	 }
	 _width = buffer.size();
	 _height = iLine;
	 */
};
Bet šitādi programma IET! Es nemeloju.
Gooby pls

atis
Posts: 57
Joined: 30 Nov 2011, 01:08

Re: problēma

#22 Post by atis » 15 Feb 2012, 23:05

Tas notiek arī, ja no projekta izvāc ārā SDL?

User avatar
kristapuciitis
Posts: 163
Joined: 03 Jun 2011, 14:22

Re: problēma

#23 Post by kristapuciitis » 15 Feb 2012, 23:20

atis wrote:Tas notiek arī, ja no projekta izvāc ārā SDL?
Programma bez SDL ir te:

Code: Select all

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

#define MAX_CELLS 40
enum CellType
{
	CELL_TYPE_NONE = 0,
	CELL_TYPE_GROUND
};

struct Cell
{
	CellType Type;
};
class Level
{
public:
	/*void Initialize(SDL_Surface* screen);*/
	void Load(const char* fileName);
	/*void Draw();*/
private:
	/*SDL_Surface* _screen;
	Sprite _sprite;*/
	Cell cells[MAX_CELLS][MAX_CELLS];
	int _width, _height;
};

void Level::Load(const char* fileName)
{
	 ifstream file(fileName);
	 if (!file.is_open())
		 return;
	 std::string buffer;
	 int iLine = 0;
	 while (!file.eof())
	 {
		 getline(file, buffer);
		 for (unsigned int i = 0; i < buffer.size(); i++)
		 {
			 switch(buffer[i])
			 {
			 case 'n':
				 cells[i][iLine].Type = CELL_TYPE_NONE;
				 break;
			 case 'g':
				 cells[i][iLine].Type = CELL_TYPE_GROUND;
				 break;
			 }
		 }
		 iLine++;
	 }
	 _width = buffer.size();
	 _height = iLine;
};

void main()
{
	Level level;
	level.Load("file");
}
Un viss iet. wtf
Gooby pls

bubu
Guru
Guru
Posts: 398
Joined: 07 Dec 2010, 11:54

Re: problēma

#24 Post by bubu » 15 Feb 2012, 23:35

Ak tu runā par savu mazo programmu, nevis to sākumā, ko rar'ā iedevi..
Nu te tu izsauc Load, jā.
Uzliec breakpointu pirmajā Level::Load rindā. Un pa soļiem izej cauri savai funkcijai, pārbaudod vai visi mainīgie satur tādas vērtības kādas tu esi iedomājies, ka tiem ir jāsatur. Padebugo!
Un vai esi pārliecināts, ka failā nav vairāk par 40 rindām un 40 kolonnām?

btw - nedrīkst rakstīt "void main". main vienmēr ir jāatgriež int: http://www.parashift.com/c%2B%2B-faq-li ... l#faq-29.3
Tas, ka tev neko nevajag atgriezt ir ok. C++'ā standartāir tiekts, ka tu drīksti nerakstīt return'u mainā - tad to kompilators pats uzģenerēs: http://www2.research.att.com/~bs/bs_faq2.html#void-main

User avatar
kristapuciitis
Posts: 163
Joined: 03 Jun 2011, 14:22

Re: problēma

#25 Post by kristapuciitis » 15 Feb 2012, 23:57

Šī mazā programma ir bez SDL un tā iet, bet tieši šis pats ar SDL, kas ir rar'ā, neiet. Rarā man pat nav Level mainīgais un nav neviena funkcijas Level::Load izsaukuma, bet vienalga karās.
Gooby pls

atis
Posts: 57
Joined: 30 Nov 2011, 01:08

Re: problēma

#26 Post by atis » 16 Feb 2012, 00:01

Man šķiet, kristapuciitis runā tieši par to sākuma programmu.. paspēlējies ar linker settingiem, pamēģini uzlikt citu SDL versiju, uztaisīt jaunu projektu, vai pārinstalēt msvc++. Tas katrā ziņā izklausās ļoti mistiski.

bubu
Guru
Guru
Posts: 398
Joined: 07 Dec 2010, 11:54

Re: problēma

#27 Post by bubu » 16 Feb 2012, 00:23

Kamon. Pārinstalēt MSVC? Man n-to gadu garumā nav vajadzējis pārinstalēt MSVC šādu "problēmu" dēļ.

Jau kuro reizi saku - paņem debugeri rokā un izej rindiņu pa rindiņai cauri programmai līdz atrodi, kas tev tur neiet vai strādā nepareizi.

atis
Posts: 57
Joined: 30 Nov 2011, 01:08

Re: problēma

#28 Post by atis » 16 Feb 2012, 01:07

Nu programma principā izskatās OK, un nedomāju, ka kristapucīts ir tik liels experts, lai debugotu kaut ko ārpus sava koda.

Ja pietiek pievienot vienu, pat neizpildītu, funkciju, lai tā sāktu krašot, tad tas ož pēc nepareizas salinkošanas problēmas. Protams, klātienē neredzot ir grūti spriest, kas tur notiek, bet kā tu izskaidro SDL_UpperBlit() izsaukumu pa taisno no WinMain() funkcijas? Ja WinMain eksistē SDLmain libā, tad es neredzu, kā pat -O3 var pa taisno izsaukt SDL_UpperBlit() kristapucīša main() izplides laikā? Varētu būt, ka steks ir sačakarēts, bet atkal: neizskatās, ka kristapucīša kods to varētu izdarīt.

Varbūt es kaut ko neredzu, un kristapucīt: ja tu tiešam vari ar debugeri pieattačoties kaut kam sakarīgam klāt, tad pamēģini to izdarīt. Vēl pamēģini ieslēgt/izslēgt debug simbolu ģenerēšanu un paskaties, ko tas maina.

bubu
Guru
Guru
Posts: 398
Joined: 07 Dec 2010, 11:54

Re: problēma

#29 Post by bubu » 16 Feb 2012, 01:19

atis wrote:Ja pietiek pievienot vienu, pat neizpildītu, funkciju, lai tā sāktu krašot, tad tas ož pēc nepareizas salinkošanas problēmas.
Tādā gadījumā clean / rebuild.
Protams, klātienē neredzot ir grūti spriest, kas tur notiek, bet kā tu izskaidro SDL_UpperBlit() izsaukumu pa taisno no WinMain() funkcijas? Ja WinMain eksistē SDLmain libā, tad es neredzu, kā pat -O3 var pa taisno izsaukt SDL_UpperBlit() kristapucīša main() izplides laikā?
Ar ieslēgtām optimizācijām - precīzāk Link Time Code Generation, kad funkcijas inlainojās linkošanas laikā. GCC analogs būtu -flto arguments kompilēšanas/linkošanas laikā.

atis
Posts: 57
Joined: 30 Nov 2011, 01:08

Re: problēma

#30 Post by atis » 16 Feb 2012, 01:41

Code: Select all

precīzāk Link Time Code Generation
Kaut ko jaunu uzzināju, bet tas ir defaultā ieslēgts msvc++? Kā arī: vai tad -g (ģenerējam debug infu) + -O0 (nekādas opt) nav defaultais settings?

Lai nu kā -- gaidām updeitu no kristapucīša :o

Post Reply

Return to “Iesācējiem / For beginners”