• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

makro wyrzuca błąd, pomimo, że raczej nie powinno go być

Object Storage Arubacloud
0 głosów
356 wizyt
pytanie zadane 14 lutego 2018 w C i C++ przez Avernis Nałogowiec (27,400 p.)

Cześć. Napisałem takie o to makro: 

#define SPAWN_CHUNK_WITH_PARAMS(chunkReference, bonusXLocation, bonusYLocation, bonusX, bonusY)  \
chunkReference = Cast<AWorldGenerator>(UGameplayStatics::BeginDeferredActorSpawnFromClass(this, AWorldGenerator::StaticClass(), FTransform(FRotator(0, 0, 0), FVector(spawnedChunks[xMap.first][yMap.first]->GetActorLocation().X + bonusXLocation, spawnedChunks[xMap.first][yMap.first]->GetActorLocation().Y + bonusYLocation, spawnedChunks[xMap.first][yMap.first]->GetActorLocation().Z)))); \
if (chunkReference != nullptr) \
{ \
	chunkReference->bonusX = bonusX; \
	chunkReference->bonusY = bonusY; \
	UGameplayStatics::FinishSpawningActor(chunkReference, FTransform(FRotator(0, 0, 0), FVector(spawnedChunks[xMap.first][yMap.first]->GetActorLocation().X + bonusXLocation, spawnedChunks[xMap.first][yMap.first]->GetActorLocation().Y + bonusYLocation, spawnedChunks[xMap.first][yMap.first]->GetActorLocation().Z))); \
} 

 

I używam go w ten sposób:

 

else
{
SPAWN_CHUNK_WITH_PARAMS(spawnedChunks[xMap.first + 1][yMap.first + 1], 5000, 5000, 9, 9)
}

Tylko problem w tym, że wywala mi błędy: syntax error: 'constant', xMap is not a member of AWorldGenerator, spawnedChunks is not a member of AWorldGenerator, first is not a member of AWorldGenerator. Jest o tyle ciekawiej, że gdy z makra usunę tą część:

	chunkReference->bonusX = bonusX; \
	chunkReference->bonusY = bonusY; \

To wszystko dobrze działa. Używam makra zamiast funkcji, bo ten sam kod w funkcji skutkował crashem gry, a bez funkcji już nie. Spawned chunks to mapa obiektów AWorldGenerator, a xMap i yMap to iteratory

komentarz 14 lutego 2018 przez the_danger Gaduła (4,800 p.)

Używam makra zamiast funkcji, bo ten sam kod w funkcji skutkował crashem gry, a bez funkcji już nie.

To popraw funkcję a nie obchodź problem naokoło

komentarz 14 lutego 2018 przez Avernis Nałogowiec (27,400 p.)

Problem właśnie w tym, że jak mam ją niby poprawić, skoro jest to identyczny kod? Gdybym napisał tak: 

void write()
{
    std::cout << "x";
} //jest crash

std::cout << "x"; //nie ma crasha

 

komentarz 14 lutego 2018 przez the_danger Gaduła (4,800 p.)
Widocznie nie jest identyczny. Odpal debugger, zlokalizuj problem i go napraw.
komentarz 14 lutego 2018 przez Avernis Nałogowiec (27,400 p.)
void AChunkGenerator::spawnChunk(AWorldGenerator *chunkReference, AWorldGenerator *chunkThtPlayerStandOn, float bonusXLocation, float bonusYLocation, float setBonusX, float setbonusY)
{
	chunkReference = Cast<AWorldGenerator>(UGameplayStatics::BeginDeferredActorSpawnFromClass(this, AWorldGenerator::StaticClass(), FTransform(FRotator(0, 0, 0), FVector(chunkThtPlayerStandOn->GetActorLocation().X + bonusXLocation, chunkThtPlayerStandOn->GetActorLocation().Y + bonusYLocation, chunkThtPlayerStandOn->GetActorLocation().Z))));
	if (chunkReference != nullptr) 
	{ 
		//chunkReference->bonusX = setBonusX; 
		UGameplayStatics::FinishSpawningActor(chunkReference, FTransform(FRotator(0, 0, 0), FVector(chunkThtPlayerStandOn->GetActorLocation().X + bonusXLocation, chunkThtPlayerStandOn->GetActorLocation().Y + bonusYLocation, chunkThtPlayerStandOn->GetActorLocation().Z)));
	}
}

Tak wygląda funkcja i crashuje

1 odpowiedź

+1 głos
odpowiedź 14 lutego 2018 przez Radfler VIP (101,030 p.)
wybrane 14 lutego 2018 przez Avernis
 
Najlepsza
#define SPAWN_CHUNK_WITH_PARAMS(chunkReference, bonusXLocation, bonusYLocation, bonusX, bonusY)  \
[...]
chunkReference->bonusX = bonusX; \
chunkReference->bonusY = bonusY; \

Z tego co widzę to "bonusX" (i "bonusY") jest zastępowane przez 9, więc powstaje ci coś takiego:

 spawnedChunks[xMap.first + 1][yMap.first + 1]->9 = 9;

A to niekoniecznie jest poprawne.

I nie stosuj makr.

komentarz 14 lutego 2018 przez Avernis Nałogowiec (27,400 p.)
Dlaczego zastosowałem makro już wyjaśniłem, i zaraz sprawdzę twoją teorię

Podobne pytania

+1 głos
1 odpowiedź 326 wizyt
pytanie zadane 16 stycznia 2022 w SQL, bazy danych przez danehcan Obywatel (1,170 p.)
+1 głos
1 odpowiedź 191 wizyt
pytanie zadane 27 września 2021 w Algorytmy przez msth32 Nowicjusz (130 p.)
0 głosów
0 odpowiedzi 203 wizyt
pytanie zadane 26 listopada 2020 w Visual Basic przez ZenekMarjewka Nowicjusz (120 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...