Accessing members of super class [message #1851555] |
Fri, 08 April 2022 08:07  |
Eclipse User |
|
|
|
Hello,
I am having problems accessing members of a superclass. I tried a simple example, to see if members can be accessed from subclasses.
In this simple example it works, while in my actual code it does not
# Example 1
type class @abstract DeviceController runs on MTC{
var charstring v_dummy := "";
public function @abstract f_do_sth();
}
type class Device extends DeviceController runs on MTC{
public function f_do_sth() {
log(v_dummy);
}
}
# Example 2
In my actual project, I get an error in a subclass, where the compiler complains that the member was not defined. But it is exactly defined as in the above example.
module CellularCommonDeviceController {
...
public type class @abstract CellularDeviceController runs on Cellular_Node_CT {
var charstring cmd := "";
...
}
}
module Cs {
...
type class @final CsGr851 extends CellularDeviceController runs on Cellular_Node_CT {
var ModemCapability v_cap;
create():CellularDeviceController("") {
v_cap := {3, 0, false}
}
}
...
}
In the generated c++ code I see that cmd is a protected member in the superclass. I can access the member from the class itself, but accessing it from a subclass seems to be a problem somehow. Accessing methods is not a problem.
Cs .cc:334:33: error: 'cmd' is not a member of 'CellularCommonDeviceController'
334 | CellularCommonDeviceController::cmd = cs_20;
##
I have various imports, but nowhere another variable with that name is declared. Declaring a local variable cmd in the subclass works without any issues.
Does someone know by what that behavior might be caused?
|
|
|
|
|
|
|
|
Re: Accessing members of super class [message #1852043 is a reply to message #1851886] |
Wed, 27 April 2022 04:26   |
Eclipse User |
|
|
|
Thank you for the timely update. However, I am now facing different issues which might not be caused by this fix tough, since I
upgrade from the 8.0.0 release to the latest commit.
I have the following setup of classes:
CellularInterface -> abstract class with only abstract methods
NbInterface -> abstract class extending cellular interface but only having abstract methods as well
CellularDeviceController runs on Node_CT -> abstract class implementing NbInterface, but leaving some methods abstract to be implemented by the concrete class
Cs runs on Node_CT -> final class implementing CellularDeviceController
I use this component:
Node_CT -> has different port types and the above mentioned interface types, e.g. NbInterface
In a separate module I am using a component variable of type NbInterface (vc_nb) and instantiate the concrete class `Cs`
vc_nb := csGr851.create();
With the titan release with Tag 8.0.0 all builds and executes.
When I pull to the latest commit and build titan again, I get errors in the generated code, telling me that I can't call new on my concrete class, because there appears to be pure virtual functions in my class. These methods that are complained about, are however implemented in the class.
CommonFunctionality.cc:167:79: error: invalid new-expression of abstract class type 'cs::csGr851'
167 | CommonInterface::Node__CT_component_vc__nbiot = new cs::csGr851();
| ^
cs.hh:68:7: note: because the following virtual functions are pure within 'cs::csGr851':
68 | class csGr851 : public CellularCommonDeviceController::CellularDeviceController {
| ^~~~~~~
CommonInterface.hh:133:14: note: 'virtual void CommonInterface::CellularInterface::f__select__operator(const BOOLEAN&, CommonInterface::CellularInterface_defpar_type_0)'
133 | virtual void f__select__operator(const BOOLEAN& auto_, CellularInterface_defpar_type_0 plmn_defpar) = 0;
| ^~~~~~~~~~~~~~~~~~~
Do you have an idea, what change might cause this behavior or what might go wrong?
Best regards
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.04090 seconds