C++ 函数未在非真实中被调用

C++ 函数未在非真实中被调用,c++,unreal-engine4,C++,Unreal Engine4,我是一个不真实的人。我是一个研究项目的一部分,我正在努力学习更好的引擎,但有一些东西让我陷入了相当长的一段时间。我在.h文件中声明了一个私有函数GetGrids。我试图在.cpp文件中调用它,但控件从未进入该函数。我在这个函数中设置了一个断点,它根本没有被命中。我尝试重新启动VisualStudio,重建解决方案,但似乎没有任何效果 #include "RoboRev_Win.h" #include "MapsManager.h" AMapsManager::AMapsManager(cons

我是一个不真实的人。我是一个研究项目的一部分,我正在努力学习更好的引擎,但有一些东西让我陷入了相当长的一段时间。我在.h文件中声明了一个私有函数
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."));