2

我是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吗?我只是想与 C++ 类进行比较。

4

5 回答 5

3

每个 SystemC 模块,无论是使用宏定义SC_MODULE还是继承sc_module,都需要有一个模块名称。SystemC 模块的构造函数必须有一个 class 参数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 )
于 2015-05-13T06:54:20.253 回答
1

我看不出有什么不对。

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

我希望你能用这个检查你的。

于 2012-05-04T15:19:36.863 回答
1

该宏SC_CTOR已为您创建了一个hello(const sc_module_name name&)构造函数。因此编译器不会生成默认构造函数供您调用,并且无法创建对象 hello。

于 2012-05-10T10:59:14.997 回答
0

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

于 2013-08-08T09:51:53.397 回答
0

您可能将构造函数定义为私有的。结果编译器无法从 main.cpp 中命名它。

于 2016-12-28T02:34:19.137 回答