problēma
- kristapuciitis
- Posts: 163
- Joined: 03 Jun 2011, 14:22
problēma
Sveiki!
Man ir problēma- gandrīz vai katrā tutoriālī rāda, ka failu vajag atvērt ar ifstream fin(fileName); . Es daru tieši tā pat, bet man notiek kļūda- viss nokompilējas bez error, bet pati spēle nepalaižas. =( Ja aizkomentē visu to funkciju, kura nolasa datus no faila, tad errora nav, bet ja atkomentē tieši ifstream file(fileName); , tad notiek kļūda, ka spēle nepalaižas. Kur var būt problēma? Tā funkcija atrodas Level.cpp failā.
Man ir problēma- gandrīz vai katrā tutoriālī rāda, ka failu vajag atvērt ar ifstream fin(fileName); . Es daru tieši tā pat, bet man notiek kļūda- viss nokompilējas bez error, bet pati spēle nepalaižas. =( Ja aizkomentē visu to funkciju, kura nolasa datus no faila, tad errora nav, bet ja atkomentē tieši ifstream file(fileName); , tad notiek kļūda, ka spēle nepalaižas. Kur var būt problēma? Tā funkcija atrodas Level.cpp failā.
- Attachments
-
- PlatformGmae.rar
- (8.56 KiB) Downloaded 472 times
Gooby pls
Re: problēma
A debugeris ko saka?
C stila stringus btw labāk ir padot kā const char* tipu, nevis char*
C stila stringus btw labāk ir padot kā const char* tipu, nevis char*
Re: problēma
Nokompilēju, palaidu, viss strādā. Vienīgā lieta: tu nepārbaudi, vai fails vispār ir atvēries. Jo, ja fails neatveras, tad viņš ieiet mūžīgā ciklā. Šitais nosacījums
vienmēr ir patiess. Drošvien faila nosaukumā vai ceļā ir kļūda tavā gadījumā.
Code: Select all
while (!file.eof())
- kristapuciitis
- Posts: 163
- Joined: 03 Jun 2011, 14:22
Re: problēma
Tad sanāk, ka, ja es c++ lieku atvērt failu, ja tāda faila nav, tad kods ieciklosies arī tad, ja funkcija nav nereizes izsaukta?
Gooby pls
Re: problēma
Kā, Tev, jau teica, prims lieto ir jāparbauda vai fails eksistē. Vienkāršakais kā to darīt:
Code: Select all
if(file.is_open() == false) {
// fails nav atvērts kāda iemesla pēc
}
Re: problēma
Nē, tā tas nebūs.kristapuciitis wrote:Tad sanāk, ka, ja es c++ lieku atvērt failu, ja tāda faila nav, tad kods ieciklosies arī tad, ja funkcija nav nereizes izsaukta?
Tavā dotajā kodā funkcija Level::Load() netika izsaukta un viss strādāja.
Tad es iekš main() pieliku:
Code: Select all
Level *lvl = new Level();
lvl->Load("kaut_kads_fails");
- kristapuciitis
- Posts: 163
- Joined: 03 Jun 2011, 14:22
Re: problēma
Man nestrādā pat, ja funkcija netiek izsaukta. Ja pat tajā funkcijā paliek tikai
Vienalga nokarās.
Code: Select all
ifstream file(fileName);
if (!file.is_open())
return;
- Attachments
-
- Bez nosaukuma.png (245.29 KiB) Viewed 15475 times
Gooby pls
- kristapuciitis
- Posts: 163
- Joined: 03 Jun 2011, 14:22
Re: problēma
emm, tā funkcija nemaz netiek izsauka un faila nosaukums netika norādīts, bet programma vienalga nokarās tieši tā ifstream file(fileName). =(Tenjou wrote:Kā, Tev, jau teica, prims lieto ir jāparbauda vai fails eksistē. Vienkāršakais kā to darīt:Code: Select all
if(file.is_open() == false) { // fails nav atvērts kāda iemesla pēc }
Gooby pls
Re: problēma
No tava skrīnšota redzams, ka nokrašo SDL blitošanas funkcijā.
Tad nu ielūrēsim šeit:
Izskatās, ka SDL_Rect struktūrai tu atstāj neinicializētus mainīgos w un h. Attiecīgi viņš paķer to, kas atradās pirms brīža uz steka.. Pieļauju, ka, ja tas ir kaut kas galīgi garām, tad SDL_BlitSurface() varētu arī nokrašot. Vismaz tas izskaidrotu, kāpēc kaut kāda automātiskā variabļa eksistence/neeksistence (ifstream file) var izmainīt uzvedību.
Tad nu ielūrēsim šeit:
Code: Select all
void Sprite::Draw(SDL_Surface* destination, int x, int y)
{
SDL_Rect pos;
pos.x = x;
pos.y = y;
SDL_BlitSurface(_surface, NULL, destination, &pos);
};
- kristapuciitis
- Posts: 163
- Joined: 03 Jun 2011, 14:22
Re: problēma
Tas neko nedod, saliku w un h pa nullēm, vienalga nokarās. Sataisīju jaunu projektu:
At least šī palaižas. Kaut kāds tāds brīnums ar C++ man nebija noticis :/
Code: Select all
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Level
{
public:
void Load(const char* fileName);
};
void Level::Load(const char* fileName)
{
std::ifstream file(fileName);
string buffer;
int iLine = 0;
while (!file.eof())
{
getline(file, buffer);
}
};
void main()
{
Level level;
level.Load("file");
}
Gooby pls