Jump to content

problem with constructor


zareie.ehsan

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()
   {
      /////
   }
};
 
Link to comment
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? ;-)

Link to comment
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 :-) 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...