Scoreboard connection with multiple monitor : uvm_analysis_imp_decl

Could anyone please help me with this issue ?
I am creating my own example to learn & code different features of UVM, and I am hitting these errors :

Error-[MFNF] Member not found
base_mon.sv, 37
“this.m_port.”
Could not find member ‘write_BEFORE’ in class ‘uvm_analysis_port’, at
“/apps/vcsmx/vcs/Q-2020.03-SP1-1//etc/uvm-1.2/src/tlm1/uvm_analysis_port.svh”,
56.

Error-[MFNF] Member not found
base_mon_passive.sv, 34
“this.p_m_port.”
Could not find member ‘write_AFTER’ in class ‘uvm_analysis_port’, at
“/apps/vcsmx/vcs/Q-2020.03-SP1-1//etc/uvm-1.2/src/tlm1/uvm_analysis_port.svh”,
56.

(There may be additional errors in code but I need help only for these uvm_analysis_imp_decl related errors)

Code is very messy (logic wise, my DUT is also imaginary). Asked in conversation here :

but since that is old conversation, I am not sure if it is active thread. so I am posting this issue as a seperate post. I will update the other place when it is resolved.

Code structure:
base_mon, base_mon_passive (two monitor classes)


class base_mon extends uvm_monitor;
  `uvm_component_utils(base_mon)
  
  uvm_analysis_port#(base_tr) m_port;
...
virtual task run_phase (uvm_phase phase);
...
  m_port.write_BEFORE(tr);
...

and


class base_mon_passive extends uvm_monitor;
  `uvm_component_utils(base_mon_passive)
  
  uvm_analysis_port#(base_tr) p_m_port;  
...
virtual task run_phase (uvm_phase phase);
...
  p_m_port.write_AFTER(tr);
...

these two monitor classes are built in base_agent class


mon = base_mon::type_id::create("mon", this);
mon_p = base_mon_passive::type_id::create("mon_p", this);

base_env class have analysis_port and analysis_imp connection


agent.mon.m_port.connect(scbd.s_imp_BEFORE);
agent.mon_p.p_m_port.connect(scbd.s_imp_AFTER);

Scoreboard defination is here:


`uvm_analysis_imp_decl(_AFTER)
`uvm_analysis_imp_decl(_BEFORE)

class base_scbd extends uvm_component;
  `uvm_component_utils(base_scbd)
  

  uvm_analysis_imp_AFTER#(base_tr, base_scbd) s_imp_AFTER;
  uvm_analysis_imp_BEFORE#(base_tr, base_scbd) s_imp_BEFORE;

virtual function void write_BEFORE(base_tr tr);   // type and handle
...
endfunction 

virtual function void write_AFTER(base_tr tr);   // type and handle
...
endfunction   

In reply to vickydhudashia:

Just call

m_port.write(tr);

and

p_m_port.write(tr);
`uvm_analysis_imp_decl(_AFTER)
`uvm_analysis_imp_decl(_BEFORE)

Is just for the scoreboard so you can have multiple “write” methods in the same class.