У меня есть эта странная ошибка в моем коде, и я, похоже, не могу понять, что происходит. Здесь гораздо больше знающих людей, чем я, поэтому я решил, что опубликую этот вопрос.Как добавить переменную значение в список элементов списка вставки?
Этот код работает правильно:
histogram_requests -> AddHistos("trajTree",
{
.fill = "HitEfficiency_vs_Layers",
.pfs = {},
.cuts = {},
.draw = "LPE1",
.opt = "",
.ranges = {0.0, 0.0}
});
Где AddHistos объявлен как это:
void AddHistos(std::string name, HistoParams hp, bool AddCutsToTitle = true);
Где HistoParams является структура:
typedef struct HistoParams
{
std::string fill;
std::vector<const char*> pfs;
std::vector<const char*> cuts;
std::string draw;
std::string opt;
std::vector<double> ranges;
} HistoParams;
Так согласно определению типа .cuts должен быть std :: vector of const char *. Но всякий раз, когда я пытаюсь сделать что-то вроде этого:
std::vector<const char*> added_cuts = {};
if(options.add_cuts)
{
added_cuts.push_back("EffCuts");
}
histogram_requests -> AddHistos("trajTree",
{
.fill = "HitEfficiency_vs_Layers",
.pfs = {},
.cuts = added_cuts,
.draw = "LPE1",
.opt = "",
.ranges = {0.0, 0.0}
});
Тогда я получаю следующее сообщение об ошибке:
ошибка: нет функции согласования для вызова «Custom_smart_histos :: AddHistos (Const полукокса [9], brace- список закрытых инициализаторов) '
Может кто-нибудь сказать мне, почему я получаю эту ошибку или как это сделать правильно? Большое спасибо!
Знаете ли вы, что используете расширения для компилятора? Для начала это недействительно. –
Это действительно в C++ 11. –
Назначенные инициализаторы все еще не находятся в C++ 14. Но они были особенностью Microsoft C++ с VisualStudio 2013. – Puffin