2016-10-05 80 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