C++ 函数未在非真实中被调用
我是一个不真实的人。我是一个研究项目的一部分,我正在努力学习更好的引擎,但有一些东西让我陷入了相当长的一段时间。我在.h文件中声明了一个私有函数C++ 函数未在非真实中被调用,c++,unreal-engine4,C++,Unreal Engine4,我是一个不真实的人。我是一个研究项目的一部分,我正在努力学习更好的引擎,但有一些东西让我陷入了相当长的一段时间。我在.h文件中声明了一个私有函数GetGrids。我试图在.cpp文件中调用它,但控件从未进入该函数。我在这个函数中设置了一个断点,它根本没有被命中。我尝试重新启动VisualStudio,重建解决方案,但似乎没有任何效果 #include "RoboRev_Win.h" #include "MapsManager.h" AMapsManager::AMapsManager(cons
GetGrids
。我试图在.cpp文件中调用它,但控件从未进入该函数。我在这个函数中设置了一个断点,它根本没有被命中。我尝试重新启动VisualStudio,重建解决方案,但似乎没有任何效果
#include "RoboRev_Win.h"
#include "MapsManager.h"
AMapsManager::AMapsManager(const FObjectInitializer& ObjectInitializer)
:Super(ObjectInitializer)
{
m_row = MAP_SIZE;
m_column = MAP_SIZE;
m_startPoint = FVector(0, 0, 90);
m_IsMapCreated = false;
PrimaryActorTick.bStartWithTickEnabled = true;
}
void AMapsManager::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
if (!m_IsMapCreated)
CreateMap();
}
AGrid* AMapsManager::GetGridWithID(int _ID)
{
for (int i = 1; i <= GRID_SIZE*GRID_SIZE; i++)
{
AGrid *_Grid = m_Grids[i];
if (_Grid->ID == _ID)
{
return _Grid;
}
}
return NULL;
}
void AMapsManager::GetGrids()
{
int a, b, c;
a = 1;
b = 2;
c = 3;
int sum;
sum = a + b + c;
printf("");
printf("");
}
void AMapsManager::CreateMap()
{
UWorld* const _World = GetWorld();
if (_World)
{
m_IsMapCreated = true;
FActorSpawnParameters _Parameters;
_Parameters.Owner = this;
_Parameters.Instigator = Instigator;
FVector _SpawnPosition;
FRotator _Rotator(0, 0, 0);
_SpawnPosition = FVector(0, 0, 0);
originalX = _SpawnPosition.X - ((MAP_SIZE / 2)*GRID_SIZE);
_SpawnPosition.X = originalX;
_SpawnPosition.Y = originalX;
_CurrentID = 1;
for (int i = 1; i <= m_row; i++)
{
for (int j = 1; j <= m_column; j++)
{
AGrid *_Grid = static_cast<AGrid *>(_World->SpawnActor(m_GridPawn, &_SpawnPosition, &_Rotator, _Parameters));
_Grid->ID = _CurrentID;
m_Grids.push_back(_Grid);
_SpawnPosition.X += GRID_SIZE;
_CurrentID++;
}
_SpawnPosition.Y += GRID_SIZE;
_SpawnPosition.X = originalX;
}
}
int _MapIDs[] = { 1, 2, 3, 4, 5, 10, 15, 20, 25 };
int k = 9;
for (int l = 0; l < k; l++)
{
//AGrid *_Grid = GetGridWithID(_MapIDs[l]);
//_Grid->ChangeMaterial();
this->GetGrids();
}
}
请帮忙 您的Visual Studio编译器配置为非常积极地优化代码和函数调用。由于GetGrids()方法不会对正在运行的程序产生任何影响,编译器只会完全放弃调用或内联诸如print之类的内容。 即使在使用断点进行调试时,也不能跳转到编译器优化过的方法中 尝试向函数中添加类似的内容,以便在运行的引擎中看到它
UE_LOG(LogExec, Warning, TEXT("GetGrids() was called."));
在确定未调用
GetGrids
的原因之前,您确定是否调用了CreateMap
?您是否在该函数的开头设置了断点并单步执行了该函数?@Aadithya您如何知道该函数没有被调用?您只需打印两个空字符串,因此即使正在调用,也不会看到任何输出。是的,正在调用CreateMap。我放置了一个断点并逐步遍历代码@TheDestroyer,我在该函数中放置了一个断点,但它不是hit@Aadithya啊,好的。我是Visual Studio的新手,所以不知道如何使用断点工具。非常感谢!你能告诉我如何减少优化吗?基本上,我该如何告诉VisualStudio不要那样做?因为我在另一个项目中使用它,而这在那里不会发生。我不知道为什么它会依赖于项目。据我所知,你们可以而且不应该减少它。问题是项目文件和所有配置都是由非真实引擎自动创建的。即使要更改它,引擎也会再次覆盖它。
UE_LOG(LogExec, Warning, TEXT("GetGrids() was called."));