簡體   English   中英

使用 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());

即使智能感知將其識別為 std 的成員,它也會為 minmax_element 函數產生 C2039 和 C3861 錯誤,我可以查看它的定義。 我無法弄清楚我錯過了什么。 我在測試項目的頂部也包含了算法文件。

是否有我不正確的項目設置?

完整的錯誤文本:

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的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM