Неправильный вызов конструктора вызывает ошибку сегментацииC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Неправильный вызов конструктора вызывает ошибку сегментации

Сообщение Anonymous »

У меня есть два класса, которые независимо объявлены в их собственном заголовке, а их методы определены в их собственных TU/.cpp.
классы одинаковы по имени и пространству имен. мудро, но существуют в разных каталогах базы кода и имеют разные функциональные возможности, они выглядят следующим образом:
core1/abc1.h:

Код: Выделить всё

namespace ns {
class abc {
....
std::map m;
};
}

core1/abc1.cpp:

Код: Выделить всё

    namespace ns {
abc:~abc() {

};
}

core2/abc2.h:

Код: Выделить всё

namespace ns {
class abc {

std::unordered_map m;
};
}

core1/abc2.cpp:

Код: Выделить всё

namespace ns {
abc:~abc() {

};
}
Когда я запускаю свою программу, которая использует оба класса, когда программа завершается и вызываются деструкторы, кажется, что она основана на gdb для экземпляра, который имеет тип, полученный из abc2.h, вызывается деструктор для типа abc1.h, что затем вызывает ошибку сегмента.
Я вижу ошибку при использовании g++ и clang, мог бы это проблема с неопределенным поведением? или потенциально ошибка компоновщика? (линкер — золотой)

при создании имя символа для использования с компоновщиком принимается во внимание имя файла - или только пространство имен, класс, имена методов являются единственными факторами, принимаемыми во внимание?

Подробнее здесь: https://stackoverflow.com/questions/791 ... tion-fault
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»