We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I put a simple class in a file named "test.h". The class is as follows:
class a { public: int b; };
I am using the Keil MCBSTM32 board (STM32F103RB processor).
I place this file in "C:\Keil\ARM\Boards\Keil\MCBSTM32\Timer". I then open the timer project.
If I include the file in timer.c I get the following error:
Build target 'MCBSTM32' compiling Timer.c... test.h(2): error: #20: identifier "class" is undefined test.h(2): error: #65: expected a ";" Target not created
Why does it give me an error? I thought the compiler ssuported C++?
Many compilers look at the file type (extension) to decide whether they should be treated as C++ or ANSI 'C'
Commonly, .c is taken to mean ANSI 'C' - so you would expect to get errors from C++ stuff...
What does the Manual say?
As far as I could determine the Manual or nothing I was able to locate with a search in this forum said anything on C++ compilation, therefore the question. I did not realize that there was a possibility that the extension had anything to do with the compilers ability to recognise C++. I have worked with compilers where you could intermix C and C++ in ".c" file. Most of the time I have worked exclusively in either C or C++. I must admit, I have never tried this particular scenario.
<sigh> I am not trying to be curt, but if I have any information on any subject, I am happy to share it. Some of us are pressured to be productive on day one and any delay will put us closer to the unemployment line. I am sorry if I offend some people by asking questions that may be in a manual. Before asking I do look to see if I can find an answer on my own. I ask publicly when I have reached a point where I feel I have spent too much time searching.
I did not realize that there was a possibility that the extension had anything to do with the compilers ability to recognise C++.
As already pointed out, often a toolchain will make the decision whether to compile code as 'C' or 'C++' based on the extension as a default. I'm not familiar with the ARM toolchain, but you may well find that there is an option (probably available in the project options as well as a command line switch) to select 'C' or 'C++' compilation on a per-file basis, irrespective of extension.
but you may well find that there is an option (probably available in the project options as well as a command line switch)
Absolutely. As mentioned before, the
-cpp
and
-c90
compiler switches for the RealView compiler.