Проблема с использованием std::initializer_list в конструкторе класса

193
05 июня 2018, 21:00

Существует следующий класс:

class htmlAttribute
{
private:
    std::string name;
    std::string value;
    std::string error_message;
    std::vector<std::string> names_database;
    std::map<std::string, std::string> values_database;
    bool check_value();
    bool check_name();
public:
    htmlAttribute(std::string _name, const std::initializer_list<std::pair<std::string, std::string>> & val_db, std::string err, std::string val)
    : name(_name), values_database(val_db.begin(), val_db.end()), error_message(err), value(val) 
{
}
htmlAttribute(std::string _name, const std::map<std::string, std::string> & val_db, std::string err, std::string val)
    : name(_name), values_database(val_db), error_message(err), value(val)
{
}
htmlAttribute(const htmlAttribute & other) {}
void CheckState();
const std::string GetName()  const { return (name); }
const std::string GetValue() const { return (value); }
};

В него пытаюсь передать список инициализации, объявленный следующим образом:

#define ATTR_DATABASE_HTML5                                      \
{                                                                \
    {  "accesskey"          , ATTR_ACCESS_KEY_VALS           },  \
    {  "class"              , ATTR_CLASS_VALS                },  \
    {  "contenteditable"    , ATTR_CONTENTEDITABLE_VALS      },  \
} // В этом макросе очень много определений, сократил. Проверил все, нигде нет пустых define и чего-то подобного

Макросы, стоящие справа в списке инициализации объявлены по следующему примеру:

#define ATTR_ACCESS_KEY_VALS          ("[0-9a-z]")
// Также определено очень много подобных макросов. Все проверил, нигде нет пустых define, которые могли бы вызвать ошибку

Конструктор пытаюсь вызвать в следующей функции:

void * GenNewAttr(std::string attr) // returns pointer to htmlAttribute 
{
    htmlAttribute instance(attr, ATTR_DATABASE_HTML5, "", "");
    attributes.push_back(instance);
    return (&(*(--attributes.end())));
}

Но получаю следующую ошибку:

Error   C2664   'htmlAttribute::htmlAttribute(const htmlAttribute &)': cannot convert argument 2 from 'initializer list' to 'const std::initializer_list<std::pair<std::string,std::string>> &' 

Исходя из гугления пытался принимать initializer_list в конструктор по значению - не привело к успеху. Проверил уже все что можно, не могу понять в чем ошибся.

Полный код проекта доступен здесь: https://github.com/lazmible/Course_work_console

Определение класса htmlAttribute: Attribute.h

Определение описанных макросов: html_attr_val_db.h

Определение функции, в которой происходит ошибка: utils.cpp

READ ALSO
Как записать время через : .Время C++

Как записать время через : .Время C++

Не могу нигде найти, как сделать,чтобы можно было вводить время через ":"К примеру, 09:45

224
Как использовать библиотеку boost на mac os? - c++

Как использовать библиотеку boost на mac os? - c++

Обьясните подключение библиотеки boost в xcode

225
Проблема с вызовом RasDial

Проблема с вызовом RasDial

Всем привет! Я пытаюсь с помощью winapi создать vpn подключение, соответственно сначала я его настраиваю а потом с помощью RasDial пытаюсь запустить,...

245
Как запустить проект на C++ включайщий sfml?

Как запустить проект на C++ включайщий sfml?

Доброго времени суток коллеги!

245