SystemC构造函数,类

时间:2012-01-29 18:25:08

标签: systemc

我是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 ++类进行比较。

5 个答案:

答案 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参数的构造函数!

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 :(得分:1)

我看不出任何错误。

事实上,在我看来,您拥有与此示例相同的代码 - > http://www.asic-world.com/systemc/first1.html

我希望你能用这个检查一下。

答案 2 :(得分:1)

SC_CTOR已为您创建了hello(const sc_module_name name&)构造函数。因此,编译器不会为您生成默认构造函数,也无法创建对象hello。

答案 3 :(得分:0)

宏扩展后的内置​​构造函数必须有一个参数。

答案 4 :(得分:0)

您可能将构造函数定义为私有。因此,编译器无法从main.cpp命名。