2

私はsystemcを初めて使用します。私が抱えている混乱が1つあります。

を作成していsc_module(hello_world)ます。sc_ctor(hello_world)中括弧の間に何もありません。モジュール内に「helloworld」を出力する単純な関数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();

そもそもなぜエラーが表示されるのですか?引数コンストラクターは1つも使用しませんでした。

だから、そうでhello_world hello("hi ")はないのではなくhello_world hello?私はC++クラスと比較しようとしていました。

4

5 に答える 5

3

SC_MODULEマクロまたは inheritsで定義されているかどうかにかかわらず、すべての SystemC モジュールにsc_moduleはモジュール名が必要です。SystemC モジュールのコンストラクターには、 class のパラメーターが 1 つ必要sc_module_nameです。

SystemC 規格 ( IEEE Std 1666-2011 )

class から (直接的または間接的に) 派生したすべてのクラスにsc_moduleは、少なくとも 1 つのコンストラクターが必要です。そのようなコンストラクターはすべて、クラスのパラメーターを 1 つだけ持つsc_module_name必要がありますが、 以外のクラスのパラメーターをさらに持つことができますsc_module_name。そのパラメーターは、コンストラクターの最初のパラメーターである必要はありません。

macro を使用している場合SC_CTOR、実際には 1 つの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

コンストラクターをプライベートとして定義した可能性があります。その結果、コンパイラは main.cpp から名前を付けることができません。

于 2016-12-28T02:34:19.137 に答える