SystemC конструктор, класс - PullRequest
       9

SystemC конструктор, класс

1 голос
/ 29 января 2012

Я новичок в systemc.У меня одна путаница.

Я создаю sc_module(hello_world)sc_ctor(hello_world) нет ничего между фигурными скобками, и у меня просто есть простая функция void say_hello() внутри модуля, которая печатает «привет мир».

В sc_main я сделал это:

hello_world hello; 
hello.say_hello();

Тем не менее, я получаю сообщение об ошибке error C2228: left of '.say_hello' must have class/struct/union.

Я попробовал это, и это сработало:

в sc_main, я сделал это:

hello_world hello("hi "); 
hello.say_hello();

Почему он показывает ошибку в первую очередь?Я не использовал конструктор одного аргумента.

Итак, вместо hello_world hello("hi ") не должно ли быть hello_world hello?Я просто пытался сравнить с классом C ++.

Ответы [ 5 ]

2 голосов
/ 13 мая 2015

Каждый модуль SystemC, независимо от того, определен ли он с помощью макроса SC_MODULE или является наследником sc_module, должен иметь имя модуля.Конструкторы модулей SystemC должны иметь один параметр класса sc_module_name.

В стандарте SystemC ( IEEE Std 1666-2011 )

Каждый производный класс (напрямуюили косвенно) из класса sc_module должен иметь хотя бы один конструктор.Каждый такой конструктор должен иметь один и только один параметр класса sc_module_name, но может иметь дополнительные параметры классов, отличных от sc_module_name.Этот параметр не обязательно должен быть первым параметром конструктора.

Если вы используете макрос SC_CTOR, это фактически конструктор с одним параметром sc_module_name!

в sc_module.h:

#define SC_CTOR(user_module_name)                           \
    typedef user_module_name SC_CURRENT_USER_MODULE;        \
    user_module_name( ::sc_core::sc_module_name )
1 голос
/ 10 мая 2012

Макрос SC_CTOR создал для вас конструктор hello(const sc_module_name name&).Поэтому компилятор не будет генерировать конструктор по умолчанию для вас, и объект hello не может быть создан.

1 голос
/ 04 мая 2012

Я не вижу в этом ничего плохого.

На самом деле, мне кажется, что у вас такой же код, как в этом примере -> http://www.asic -world.com / systemc / first1.html

Я надеюсь, что вы можете проверить это с этим.

0 голосов
/ 28 декабря 2016

Возможно, вы определили ваш конструктор как частный. В результате компилятор не может назвать его из main.cpp.

0 голосов
/ 08 августа 2013

Встроенный конструктор после раскрытия макроса должен иметь аргумент.

...