使用 std::minmax_element 解决 C2039 错误和 C3861 错误

Solving a C2039 error and a C3861 error using std::minmax_element

我刚接触 C++。

我在标准 VS2019 测试项目中的测试函数中编写了以下行:

auto minAndMaxYards = std::minmax_element(simResults.begin(), simResults.end());

它会为 minmax_element 函数产生 C2039 和 C3861 错误,即使 intellisense 将它识别为 std 的成员,我可以查看它的定义。我不知道我错过了什么。我在测试项目的顶部也包含了算法文件。

是否有项目设置不对?

完整的错误文本:

C2039 'minmax_element': 不是 'std'
的成员 C3861 'minmax_element': 未找到标识符

编辑,包括代码以备不时之需

#include <algorithm>

#include "pch.h"
#include "CppUnitTest.h"
#include "Playbook.h"
#include "PlaySim.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

std::string output;
using std::vector;

namespace FootballDynastyV20UnitTest
{
    TEST_CLASS(PlaybookIO)
    {
    public:

        TEST_METHOD(setAndGetPlayblookName)
        {
            Playbook testPlays;

            string testName = "testPlays";

            testPlays.setName(testName);
            string name = testPlays.getName();

            Assert::IsTrue(name == testName);

        }

        TEST_METHOD(addPlayIncrementsPlayNum)
        {
            Playbook testPlays;
            
            string playName = "Play1";
            int numDLine = 4;
            int numLB = 3;
            vector<int> playerPos = { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 19 };
            vector<int> playerStance = { 2, 1, 0, 0, 1, 2, 2, 3, 2, 3, 3 };
            vector<int> playerBlitzGaps = { 0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0 };


            testPlays.setName("testPlays");
            testPlays.addPlay(playName, numDLine, numLB, playerPos, playerStance, playerBlitzGaps);

            Assert::IsTrue(testPlays.getNumPlays() == 1);
        }

        TEST_METHOD(saveAndLoadPlayblook)
        {
            Playbook testPlays;
            Playbook testPlaysLoad;

            string playName = "Play1";
            int numDLine = 4;
            int numLB = 3;
            vector<int> playerPos = { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 19 };
            vector<int> playerStance = { 2, 1, 0, 0, 1, 2, 2, 3, 2, 3, 3 };
            vector<int> playerBlitzGaps = { 0, 3, 0, 0, 3, 0, 0, 0, 0, 0, 0 };


            testPlays.setName("testPlays");
            testPlays.addPlay(playName, numDLine, numLB, playerPos, playerStance, playerBlitzGaps);
            testPlays.save();

            testPlaysLoad.load(testPlays.getName());

            
            Assert::IsTrue(testPlays == testPlaysLoad);
        }
    };

    TEST_CLASS(PlaySimTesting)
    {
    public:

        TEST_METHOD(playSimReturnsYdsGainedBetweenNegative10And40)
        {
            PlaySim newPlay;
            int numSims = 2000;
            int lwrBound = -10;
            int uprBound = 40;
            vector<int> simResults;

            for (int i = 0; i < numSims; i++)
            {
                newPlay.Run();
                simResults.push_back(newPlay.GetYds());
            }
            
            auto minAndMaxYards = std::minmax_element(simResults.begin(), simResults.end());

            int actualMin = *minAndMaxYards.first;
            int actualMax = *minAndMaxYards.second;

            int yds = newPlay.GetYds();

            Assert::IsTrue((actualMin >= lwrBound) && (actualMax <= uprBound));

        }
    };
}

#include "pch.h" 移动到文件顶部。使用预编译头文件时,编译器会忽略此行以上的所有内容。在您的示例中,那将是 #include <algorithm>,这就是找不到 std::minmax_element 的原因。