2016-02-14 1 views
-2

У меня есть эта странная ошибка в моем коде, и я, похоже, не могу понять, что происходит. Здесь гораздо больше знающих людей, чем я, поэтому я решил, что опубликую этот вопрос.Как добавить переменную значение в список элементов списка вставки?

Этот код работает правильно:

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- список закрытых инициализаторов) '

Может кто-нибудь сказать мне, почему я получаю эту ошибку или как это сделать правильно? Большое спасибо!

+2

Знаете ли вы, что используете расширения для компилятора? Для начала это недействительно. –

+0

Это действительно в C++ 11. –

+0

Назначенные инициализаторы все еще не находятся в C++ 14. Но они были особенностью Microsoft C++ с VisualStudio 2013. – Puffin

ответ

0

Я понял, в чем проблема, извините за вопрос двусмысленность. Реализация Histoparams, которую я знал, была старой. Поскольку заголовок, который я включил, был защищен, я даже не заметил, что он был отменен. И новый определил разрезы как std :: vector. Переключение на то, что решило проблему.

Смежные вопросы