2012-01-29 4 views
1

전 systemc에서 새로운 기능입니다. 내가 가지고있는 혼란이 하나 있습니다.SystemC 생성자, 클래스

나는 sc_module(hello_world)을 생성 중입니다. sc_ctor(hello_world)에는 중괄호 사이에 아무 것도 없으며 "hello world"를 인쇄하는 모듈 안에 간단한 void say_hello() 기능이 있습니다.

hello_world hello; 
hello.say_hello(); 

그러나, 나는이 시도 error C2228: left of '.say_hello' must have class/struct/union.

없다는 오류를 얻고있다 그것은 일 : 다음 sc_main에서

, 내가이 짓을

sc_main에, 나는 이런 짓을 :

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

왜 오류가 표시되는지 처음부터? 하나의 인수 생성자를 사용하지 않았습니다.

hello_world hello("hi ") 대신 hello_world hello일까요? 저는 C++ 클래스와 비교하려고했습니다.

+0

안녕하세요, 전체 모듈 및 기본 코드를 게시 할 수 있습니까? –

답변

1

나는 아무것도 잘못 볼 수 없습니다. >http://www.asic-world.com/systemc/first1.html

난 당신이 한 개를 확인할 수 있습니다 희망 - 사실

는, 당신이이 예와 같이 동일한 코드를 가지고, 날 것으로 보인다.

1

매크로 SC_CTOR가 생성자 hello (const sc_module_name name &) 생성자를 생성했습니다. 그러므로 컴파일러는 호출 할 기본 생성자를 생성하지 않고 객체 hello를 작성할 수 없습니다.

0

매크로 확장 후 생성 된 생성자에는 인수가 있어야합니다.

1

모든 SystemC 모듈은 SC_MODULE 매크로로 정의되거나 sc_module을 상속 받든 모듈 이름을 가져야합니다. SystemC 모듈의 생성자에는 sc_module_name 클래스의 매개 변수가 하나 있어야합니다. 클래스 sc_module에서 SystemC를 표준 (IEEE Std 1666-2011)

유래 모든 클래스 직간접으로

적어도 하나의 생성자가된다. 그러한 모든 생성자는 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) 
0

그것은 당신이 비공개로 생성자를 정의하는 것이 가능하다. 결과적으로 컴파일러는 main.cpp에서 이름을 지정할 수 없습니다.