Проблема с разбиением определения функции constexpr - PullRequest
0 голосов
/ 16 апреля 2019

У меня возникли проблемы с разбиением constexpr между заголовком и файлом .ipp.Я взял пример из здесь (глядя на слайд 29, класс str_const), но попытался разделить его между .hpp и .ipp файлом для более чистого заголовка.

Заголовок:

#pragma once

namespace Example
{
    class ErrCode
    {
    public:

    template <std::size_t N>
    constexpr ErrCode (const int aCode, const char (& aMsg) [N]); //ctor

    constexpr ErrCode (const ErrCode & aErrCode) = default; //copy

    ErrCode & operator= (const ErrCode & aErrCode) = default; //operator=

    constexpr char operator[] (std::size_t aSize);

    //... a few other methods, all constexpr except return the string

    const int id;

    private:

    const char * const   mStrPtr;
    const std::size_t    mSize;

    }
}
#include "ErrCode.ipp"

ipp:

namespace Example
{
    template <std::size_t N>
    constexpr ErrCode::ErrCode (const int aCode, const char (& aMsg) [N] :
        id (aCode),
        mStrPtr (aMsg),
        mSize (N - 1)
    {
    }

    constexpr char ErrCode::operator[] (std::size_t aSize)
    {
        if (aSize < mSize)
        {
            return mStrPtr [aSize];
        }
        else
        {
            throw std::out_of_range ("");
        }
     }
}

У меня проблема с компилятором, который не устанавливает соединение между сигнатурами в .hpp и.ipp.По какой-то причине, когда я компилирую на VS 2017 (используя набор инструментов v140 или 2015), я получаю сообщение об ошибке перегруженной функции-члена, не найденной в классе.

error C2511: 'char Example::ErrCode::operator [](std::size_t)': overloaded member function not found in Example::ErrCode"

, где ошибка указывает на строку в .ipp, где происходит определение.

Разрешено ли мне разбивать эти методы constexpr на отдельный файл?Компилятор не имеет проблем с этими методами, если я объявляю и определяю все только в заголовке.

Любая помощь будет оценена.Если вы не можете воспроизвести ошибку, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...