Я наткнулся на проблему, которая приводит к сегфо, и я полностью в темноте, почему это происходит. Мне удалось воссоздать проблему в довольно минимальном рабочем примере, см. Ниже. Каждый Cu содержит различную реализацию карты, где возвращаемое значение функции std :: function может варьироваться, потому что разные классы нуждаются в разных реализациях этой карты для выполнения своей вещи. В каждом CU я определил структуру HandlerReturn . Я не выбрал уникальные имена, потому что они все равно не увидят друг друга. При доступе к Lambda программа Segfaults. Программа работает, когда я просто переименован в HandlerReturn , чтобы HandlerReturn2 во втором Cu. Вот минимальный рабочий пример. Пример был протестирован на Linux с использованием G ++ 13.3.0, LDD 2.39.
Я хочу знать Почему это происходит. Я уже могу решить эту проблему, используя (неназванные) пространства имен или переименованные вещи, но у меня всегда было впечатление, что отдельные переводные единицы в любом случае не имеют столкновений имен.// main.cc
#include
void fun1(std::string const &key);
void fun2(std::string const &key);
int main() {
fun1("string1");
fun2("string1");
}
< /code>
file1.cc
// file1.cc
#include
#include
#include
struct HandlerReturn {
bool state = false;
int value = 0;
};
using Handler = std::function;
std::unordered_map const _map1 = {
{
"string1", []() -> HandlerReturn { return {true, 1}; }
},
{
"string2", []() -> HandlerReturn { return {true, 2}; }
}
};
void fun1(std::string const &key) {
if (not _map1.contains(key)) {
std::cout
Подробнее здесь: https://stackoverflow.com/questions/797 ... on-units-g
Segfault из -за противоречивых типов в независимых компиляционных единицах (G ++) ⇐ C++
Программы на C++. Форум разработчиков
1753364104
Anonymous
Я наткнулся на проблему, которая приводит к сегфо, и я полностью в темноте, почему это происходит. Мне удалось воссоздать проблему в довольно минимальном рабочем примере, см. Ниже. Каждый Cu содержит различную реализацию карты, где возвращаемое значение функции std :: function может варьироваться, потому что разные классы нуждаются в разных реализациях этой карты для выполнения своей вещи. В каждом CU я определил структуру HandlerReturn . Я не выбрал уникальные имена, потому что они все равно не увидят друг друга. При доступе к Lambda программа Segfaults. Программа работает, когда я просто переименован в HandlerReturn , чтобы HandlerReturn2 во втором Cu. Вот минимальный рабочий пример. Пример был протестирован на Linux с использованием G ++ 13.3.0, LDD 2.39.
Я хочу знать [b] Почему [/b] это происходит. Я уже могу решить эту проблему, используя (неназванные) пространства имен или переименованные вещи, но у меня всегда было впечатление, что отдельные переводные единицы в любом случае не имеют столкновений имен.// main.cc
#include
void fun1(std::string const &key);
void fun2(std::string const &key);
int main() {
fun1("string1");
fun2("string1");
}
< /code>
file1.cc
// file1.cc
#include
#include
#include
struct HandlerReturn {
bool state = false;
int value = 0;
};
using Handler = std::function;
std::unordered_map const _map1 = {
{
"string1", []() -> HandlerReturn { return {true, 1}; }
},
{
"string2", []() -> HandlerReturn { return {true, 2}; }
}
};
void fun1(std::string const &key) {
if (not _map1.contains(key)) {
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79713177/segfault-due-to-conflicting-types-in-independent-compilation-units-g[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия