CTRL++ - Limitations
The following limitations apply to CTRL++:
- Currently, the variable function_ptr does not accept functions, but only static
member functions of
classes.
SimpleFunction() {} main() { function_ptr p = SimpleFunction; //error }
-
In the code of a class member function, a member function_ptr cannot be called without "this". The use of p() alone is not yet implemented. You can use callFunction(p) instead.
class Test { public function_ptr p; public MemberFunction(function_ptr externalPtr) { p = externalPtr; p(); // error } };
- Global variables are invisible in the function code of the class members.
global const int gc = 1; class Test { MemberFunction() { int i = gc; //error } };
Note: Note that the global keyword only makes sense in libraries. - Currently, class members are read-only outside the code of class function members,
except when assigned directly.
class Test { public int i; MemberFunction() { i++; } }; main() { Test t; t.i++; //error t.MemberFunction(); // ok, changes member variables }
- If an attempt is made to use enum objects as keys, the standard use does not
work.
The warning is shown: Default branch called, UIntegerVar, operator=, cannot assign variable of type CLASS_VAREnum e { first = 1 }; main() { dyn_int array; dynAppend(array, 1); int i = array[e::first]; //does not work }
i = e::first; // i == 0, warnings (see below) i = (int)e::first; // ok, not user-friendly
WCCOActrl (0), 2017.03.08 17:41:16.949, CTRL, WARNING, 5/ctrl, Location of the following log entry: A Line: 32 WCCOActrl (0), 2017.03.08 17:41:16.949, IMPL, WARNING, 50, Default branch called, UIntegerVar, operator=, cannot assign Variable of type CLASS_VAR By definition, an enum in CTRL++ is a typed enum, so you cannot assign it to an int without an explicit cast. It is better to define the target variable so that it has the same type. In this case use: e i = e::first; // no int, but e