我是systemc的新手。我有一个混乱。
我正在创建sc_module(hello_world)
。 sc_ctor(hello_world)
在花括号之间没有任何内容,我在模块中只有一个简单的void say_hello()
函数,它打印出“hello world”。
在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
而不是{{1}}吗?我只是想与C ++类进行比较。
答案 0 :(得分:2)
每个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
参数的构造函数!
:
#define SC_CTOR(user_module_name) \
typedef user_module_name SC_CURRENT_USER_MODULE; \
user_module_name( ::sc_core::sc_module_name )
答案 1 :(得分:1)
答案 2 :(得分:1)
宏SC_CTOR
已为您创建了hello(const sc_module_name name&)
构造函数。因此,编译器不会为您生成默认构造函数,也无法创建对象hello。
答案 3 :(得分:0)
宏扩展后的内置构造函数必须有一个参数。
答案 4 :(得分:0)
您可能将构造函数定义为私有。因此,编译器无法从main.cpp命名。