стандартный - в том числе или создание моего собственного определения этого вызывает ошибку C2953 при компиляции - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь использовать EASTL для проекта, над которым я работаю, он не будет компилироваться, и единственная ошибка, которую я смог найти, это его EASTL / initializer_list.h, я работаю с новейшей версией этот файл. 2 ошибки, которые пришли, были C2953 и еще одна ошибка, которая подсказывала мне посмотреть его определение. EASTL автоматически отключает все предупреждения, которые пришли вместе с включением этого файла, и даже имеет свое собственное определение для использования в своих файлах. Единственная проблема заключается в том, что он включает windows версию файла, и она все еще вызывает ошибку, даже если она должна быть в порядке? Я работаю на C ++ 14, мой набор инструментов платформы v142 (Visual Studio 2019), а моя Windows SDK версия 10.0; Я знаю, что говорит обновить «EA_HAVE_CPP11_INITIALIZER_LIST define from», что я уже сделал, так что это не должно быть проблемой.

Вот код, вызывающий ошибку:

#if defined(EA_HAVE_CPP11_INITIALIZER_LIST) // If the compiler can generate calls to std::initializer_list...

// The initializer_list type must be declared in the std namespace, as that's the 
// namespace the compiler uses when generating code to use it.
EA_DISABLE_ALL_VC_WARNINGS()
#include <initializer_list>
EA_RESTORE_ALL_VC_WARNINGS()

#else

// If you get an error here about initializer_list being already defined, then the         EA_HAVE_CPP11_INITIALIZER_LIST define from <EABase/eahave.h> needs to be updated.
namespace std
{
    // See the C++11 Standard, section 18.9.
    template<class E>
    class initializer_list
    {
    public:
        typedef E         value_type;
        typedef const E& reference;
        typedef const E& const_reference;
        typedef size_t    size_type;
        typedef const E* iterator;             // Must be const, as initializer_list (and its mpArray) is an immutable temp object.
        typedef const E* const_iterator;

    private:
        iterator  mpArray;
        size_type mArraySize;

        // This constructor is private, but the C++ compiler has the ability to call it, as per the C++11 Standard.
        initializer_list(const_iterator pArray, size_type arraySize)
            : mpArray(pArray), mArraySize(arraySize) { }

    public:
        initializer_list() EA_NOEXCEPT  // EA_NOEXCEPT requires a recent version of EABase.  
            : mpArray(NULL), mArraySize(0) { }

        size_type      size()  const EA_NOEXCEPT { return mArraySize; }
        const_iterator begin() const EA_NOEXCEPT { return mpArray; }            // Must be const_iterator, as initializer_list (and its mpArray) is an immutable temp object.
        const_iterator end()   const EA_NOEXCEPT { return mpArray + mArraySize; }
    };
}

#endif

Я попытался заставить его использовать как стандартную версию класса, так и версию класса EA, обе из которых вызывают одну и ту же ошибку (C2953). Любая помощь приветствуется, так как я хочу иметь возможность скомпилировать ее раньше, чем позже!

1 Ответ

0 голосов
/ 05 марта 2020

Разобрался с помощью друга, это была проблема с заказом на включение.

Исправлено было просто добавить "EA_HAVE_CPP11_INITIALIZER_LIST" в список определений предварительной обработки.

...