2016-10-05 79 views
0
#ifndef RAM_H 
#define RAM_H 
#include <systemc.h> 


SC_MODULE(ram) { 

void ram_proc(); 

SC_HAS_PROCESS(ram); 

private: 
    sc_clock clock; 
}; 

#endif 

然後在ram.cpp我有以下代碼SystemC的構造器初始化失敗

#include "ram.h" 

ram::ram(sc_module_name name_): clock("clock",1,SC_NS) {std::cout<<"I am in clock "<<std::endl;} 

    { //the error is occurring hier 

SC_THREAD(ram_proc); 

} 

void ram::ram_proc() { 
    std::cout<<"I am in method ram_proc "<<std::endl; 
} 

的問題是,我收到此錯誤

預期不合格-id在'{'標記之前 {

+0

您有兩個範圍塊。你的意思是有''std :: cout <<「我在時鐘」<< std :: endl;}'與構造函數在同一行? – NathanOliver

+0

是的。時鐘是內存的成員,我試圖初始化構造函數,在時鐘塊中放置一些代碼 – akaAlso

+0

您不能只將一個塊添加到另一個塊中。將要添加的代碼行添加到已存在的塊中。 – NathanOliver

回答

4

固定縮進和新行代碼如下

void ram::ram(sc_module_name name_): clock("clock",1,SC_NS) 
{ 
    std::cout<<"I am in clock "<<std::endl; 
} // <- constructor ends here 

{ //the error is occurring hier 
    SC_THREAD(ram_proc); 
} 

正如你可以看到你有兩個代碼塊。第一個塊是構造函數體。第二塊沒有鏈接任何東西。如果您想要包含SC_THREAD(ram_proc);的塊位於構造函數中,那麼您需要

void ram::ram(sc_module_name name_): clock("clock",1,SC_NS) 
{ 
    std::cout<<"I am in clock "<<std::endl; 
    SC_THREAD(ram_proc); 
} 
+0

非常感謝..這確實編譯沒有錯誤。這個想法是在時鐘中執行一些實現,當構造函數啓動時將考慮這個實現。什麼是最好的方式來做到這一點?我是否必須將時鐘傳遞給模塊,就像正常OOP – akaAlso

+0

@akaAlso不確定。我從來沒有使用systemc。 – NathanOliver

+0

好吧再次感謝 – akaAlso