Rational Software Corp.

TOC PREV NEXT INDEX



ANSI C++ Add-In

Rose ANSI C++ is the Rational Rose language add-in in support of the C++ programming language.

Because of its many benefits, users are encouraged to convert their models from Rose C++ to Rose ANSI C++. Rose ANSI C++ is designed to be powerful enough to handle large projects, with particular emphasis on scalability and completeness of language support.

A model converter is included as an add-in with this release, and the ANSI C++ online help provides instructions for this easy conversion.


Rose ANSI C++ Features and Enhancements

Rose ANSI C++ provides:

Rose ANSI C++ provides:


Known ANSI C++ Defects

Defect

Description

8350
Reverse engineering with the ANSI C++ add-in does not create a diagram that contains all reverse engineered classes. Although they do not appear on a diagram, the reverse engineered classes do exist in the model. You can see them in the browser and can add them to a diagram with drag and drop, or by using the Query|Add Classes menu item.
9084
The ANSI C++ add-in will create two unidirectional associations on reverse engineering when the model originally has a bi-direction association between two classes and both roles of the association are named.
10776
When generating code, Rose ANSI C++ does not make backup copies of files it changes, nor does it provide an undo mechanism for such changes. You are strongly encouraged to backup your source files or have them under an effective source code control mechanism before generating code.
11115
If a typedef defines more than one name, the ANSI C++ add-in does not reverse engineer the typedef. For example, reverse engineering the following code completes without error: >>> typedef struct myStruct { DWORD Version; DWORD Size; } myName, * lp_myName; <<< However, the struct myStruct appears in the model, but the typedef does not.
14630
The ANSI C++ add-in ignores comments in source code.
15120
After you convert a class or model from Classic C++ using the ANSI C++ Model Converter, you generate code for the class or model before attempting reverse engineering. Attempting to reverse engineer before generating code will cause this message to be displayed: Class cannot be reverse engineered because it does not exist in the project files.
16714
Apply button on component dialog is never enabled. Workaround: "OK" button is available and enabled.
17114
When a template class is deleted from the code, and then the code is reverse engineered, the corresponding template class in the model is deleted; however, anonymous classes that are instantiations of that template are not deleted.
17513
When indicating "vi" as the editor of choice in the Tools > ANSI C++ > Preferences dialog, it is necessary to invoke vi within the context of it's own window, by entering the following command in the preferences. xterm -e vi command_line_args Entering "vi", instead of the command listed above will start vi if an xterm window is currently open and will display the source but it then receives an 'input read error' and exits vi. emacs and gvim will work as expected.
18360
Creation order of classes affects code generation from class (but not from component). If a class containing a data member is created before the class being contained and code is generated by selecting both classes on a class diagram and choosing Tools > ANSI C++ > Generate Code, the #include for the contained class is not generated. If code is generated from the component (not the classes), the #include is generated. If the contained class is created first and code is generated from the class diagram, the #include is generated.
20639
Types nested within template instantiations may not be used as base classes or the ends of assocations, since such types are not modeled. Reverse engineering such code can result in an incorrect model. For example, if the following code is reverse engineered, the base class of class c will be "a<b>", not "a<b>::z". template <class t> class a { typedef t z; }; class b { }; class c : public a<b>::z { };
21809
Automatically generated #include directives are always relative to the source file root directory. There is no easy way to force them to always be simple names or to make them relative to some other directory.
24206
With AutoSync enabled, when a class in the model is changed from being at package scope to being a nested class, its new definition is correctly added to the code of its containing class, but its old definition in the code is not deleted.
30368
Incomplete entry is made when attempting to generate code when a type has a "$" in it's name.
31580
ANSI C++ does not generate code for ALL fully qualified assocations if target language not ANSI C++.
Potential Workaround - Model the data member as an attribute. The attribute may be instead of the association, or in addition to the association (since the association will be ignored by ANSI C++).

55134
Codename property not saved when converting from Classic C++.
55269
OperationIsConst property not converted to ANSI C++ as stereotype for operation.
55272
OperationKind C++ property not converted to ANSI C++ stereotypes.
56191
ANSI C++ Reverse Engineer of Composition displays as Aggregation.
56256
Inline property of operation lost while converting from Classic C++ to ANSI C++.
56258
OperaionIsExplicit property not converted to ANSI C++ as stereotype for constructor.


Fixed Defects in ANSI C++ Version 2002.05.00

10091
If the stereotype of an operation in the model is changed to <<const>>, and the return type of that operation is a pointer to a function, then the "const" will be inserted into the code in the wrong place.
17844
The initial values of static attributes are not updated during either code generation or reverse engineering. The initial values are used when an item is created for the first time in either the code or the model, but are not changed if the item already exists.
23123
Class customization: Attribute get and set methods with qualified type names.
23370
ANSI C++ Converter does not preserve model documentation.
25046
ANSI C++ Tab missing on component with part=Body or part=Main.
25468
Parametrized class documentation lost from the model after reverse engineering.
25564
ANSI C++ dialogs may contain incorrect dialog title of "libcppdll.so".
26191
Rose may crash when ANSI C++ reverse engineering is performed, using the following scenario:

1 Start a new Rose (ANSI C++) model

2 Create a class named "test"

3 Create a component and assigned "test" to the component

4 Mouse right click on the component and select ANSI C++ -> Open ANSI C++ Specification

5 Enter the path for "Code generation root directory:" and click OK to exit

6 Mouse right click on the component and select ANSI C++ -> Generate Code

7 Start a new Rose (ANSI C++) model

8 Create a component select ANSI C++ -> Open ANSI C++ Specification

9 Click "Add Files" button.

10 From the "Project Files:" list view window, click on the "..." button.

11 Use the dialog to locate and select test.h and test.cpp produced earlier.

12 Click OK to exit ANSI C++ Specification dialog

13 Mouse right click on the component and select ANSI C++ -> Reverse engineer

14 Drag and drop reverse engineered "test" class to the diagram. Note that there should no attributes/operations at all.

15 Open test.h from i-editor and add an operation to test class as follows:

class test
{
myFoo();
};

16 Save test.h and mouse right click on the component and select ANSI C++ -> Reverse engineer. Click OK to the class list dialog. Observe that myFoo() operation has been added to the class

17 Open test.h from i-editor and change myFoo() operation to yourFoo() as follow:

class test
{
yourFoo();
};

18 Save test.h and mouse right click on the component and select ANSI C++ -> Reverse engineer.
Click OK to close the class list dialog.
Rose may crash at this point.


30463
Duplicate ModelIDs generated for typedef in Ansi C++
31276
Initial value for role added to header file during subsequent code generation.
31350
Argument type cannot be updated when Autosync is turned on.
31579
Return type generated for Constructor if added with "class customization".
55273
If the complete model is not selected, the model converter may crash.
55676
Const not showing up in the generated ANSI C++ code.
56139
ANSI C++ Converter removes inheritance relations from model.
54367
Converter error: Parameterized class to be instantiated not defined.
54723
Invalid ANSI C++ code generated when class stereotype changed from "struct" or "enum" to a user stereotype.
62314
An enum is first reversed as attribute and then as association.


Rational Software Corporation  http://www.rational.com
support@rational.com
techpubs@rational.com
Copyright © 1993-2001, Rational Software Corporation. All rights reserved.
TOC PREV NEXT INDEX