#c 11 #uniform-initialization
#c 11 #единообразная инициализация
Вопрос:
Я использую следующий код
class test
{
public:
test(std::vector<std::string> str)
{
auto a = str[0];
a = "B";
}
test()
{
}
const std::multimap<int, std::multimap<int, test>> _var= {
{0x01, {
{
0x0f, std::vector<std::string>{"A", "B", "C", "D"}
}
}
}
};
};
int main()
{
test t;
std::cout << "Done";
}
Приведенный выше код выполняется нормально, однако при его запуске я получаю неверный доступ. Я подключил стек вызовов. Есть предложения, почему я получаю эту ошибку? или как я могу это исправить? Похоже, что это постоянный цикл.
Комментарии:
1. В чем ошибка? Для меня код соответствует требованиям.
2. Сейчас речь идет не о компиляции, а о плохом доступе. Похоже, что это постоянный цикл или что-то в этом роде во время инициализации
3. попробуйте запустить код
4. Пробовал. Обычное завершение. Какой компилятор вы используете?
5. Я использую clang. Xcode
Ответ №1:
У вас есть случай бесконечной рекурсии, приводящей к переполнению стека.
Создайте экземпляр test
—>
Инициализируйте _var
—>
Создайте экземпляр test
—>
Инициализируйте _var
—>
и так далее.