Здесь мне нужно немного помочь: при использовании g ++ 4.1 для сборки моего кода не было ошибки относительно «ссылка на класс неоднозначна». Это происходит только при использовании g ++ 4.5.2 для компиляции того же кода, а вот фрагмент кода:
#include "tlm_utils/simple_initiator_socket.h"
using tlm_utils::simple_initiator_socket;
class HvEcu : public sc_module {
public:
......
simple_initiator_socket<HvEcu> initiator_socket;
//object instantiated here, also problem happend here....
......
};
Я действительно не уверен, почему это произойдет, так как синтаксис для пространства имен действителен наверняка.
Существует исправление, чтобы избавиться от этого сообщения, и это вместо «использования tlm_utils :: simple_initiator_socket;» просто поместите «tlm_utils :: simple_initiator_socket initiator_socket;» в теле класса, показанном выше. Однако я не понимаю, почему приведенный выше код не работает, учитывая, что единственным изменением является версия компилятора.
Попробуйте использовать явный вызов:
class HvEcu : public sc_module {
tlm_utils::simple_initiator_socket<HvEcu> initiator_socket;
Урок дня: Будьте в курсе изменений в компиляторе и используйте самую последнюю стабильную версию. В противном случае вы в конечном итоге напишите старый неправильный код; и столкнуться с другими побочными эффектами компилятора.
Других решений пока нет …