Jump to content
zareie.ehsan

problem with constructor

Recommended Posts

I wanna take a  4 digit integer value as an input an make an BCD equivalent, I tried this code but it has \error at red line

error: 'decimal' : no appropriate default constructor available

 

it mean the class constructor? is the constructor of  class decimal wrong? plz help me

 

class decimal
{
public:
sc_int<4> dec0;
sc_int<4> dec1;
sc_int<4> dec2;
sc_int<4> dec3;
 
///constructor
decimal(sc_int<4> d0,sc_int<4> d1,sc_int<4> d2,sc_int<4> d3)
   {
       dec3=d3;
       dec2=d2;
       dec1=d1;
       dec0=d0;
   }
}
 
SC_MODULE (seprate_digit)
{
    sc_in <sc_int<16>> in;
    sc_in <bool> clk;
    sc_out <decimal> d;
    decimal dtmp;
 
    SC_CTOR (seprate_digit)
    {
         SC_METHOD(process3);
         sensitive << clk.pos();
    }
   void process3()
   {
      /////
   }
};
 

Share this post


Link to post
Share on other sites

As the error says (emphasis mine)

 

error: 'decimal' : no appropriate default constructor available

 

you need a default constructor (a constructor without arguments) in your case.

 

In the module, you create an instance of 'decimal' without explicitly initializing it in the constructor of 'seprate_digit'.  Theoretically, you could use an initializer list:

SC_CTOR (seprate_digit)
  : in("in"), clk("clk"), d("d") // port names -> recommended practice 
  , decimal(0,0,0,0)             // <-- explicitly initialize decimal member

Since you use 'decimal' as a signal type, you'll definitely need a default constructor.  This could look like the following

decimal()
/*  : dec0(), dec1(), dec2(), dec3() */ // optional, as sc_int has an explicit default constructor
{}

Secondly, you'll need to define more helper functions to use sc_signal with your own data types, see http://www.doulos.com/knowhow/systemc/faq/#q1

 

Greetings from Oldenburg,
  Philipp

NB: Why do you post the question three times in 10 minutes? ;-)

Share this post


Link to post
Share on other sites

thank you very much 

 

As the error says (emphasis mine)

 

 

you need a default constructor (a constructor without arguments) in your case.

 

In the module, you create an instance of 'decimal' without explicitly initializing it in the constructor of 'seprate_digit'.  Theoretically, you could use an initializer list:

SC_CTOR (seprate_digit)
  : in("in"), clk("clk"), d("d") // port names -> recommended practice 
  , decimal(0,0,0,0)             // <-- explicitly initialize decimal member

Since you use 'decimal' as a signal type, you'll definitely need a default constructor.  This could look like the following

decimal()
/*  : dec0(), dec1(), dec2(), dec3() */ // optional, as sc_int has an explicit default constructor
{}

Secondly, you'll need to define more helper functions to use sc_signal with your own data types, see http://www.doulos.com/knowhow/systemc/faq/#q1

 

Greetings from Oldenburg,
  Philipp

NB: Why do you post the question three times in 10 minutes? ;-)

thank you very much for your help full guide.

sorry, I thought my post was not successfully posted, so I posted my question many times :-) 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×