Link to home
Start Free TrialLog in
Avatar of akohan
akohan

asked on

error on compilng a C++ file using g++

Hi group,

I'm getting warning as following when I compile two cpp files. These are not my files it happened I found them at http://www.functionx.com/cpp/examples/simpleclass.htm as I was trying to learn how "ctags" works in VIM or vi

In order to compile and run I use:

$g++ Exo.cpp Cube.cpp   -o  test

Questions:
1) What caueses warning and how can I fix it? currently I have output which works fine but need to know how to get rid of this warnnig.
2)Does anybody know how I can use ctags in vim? any good resource with example?




Source is at snippet window but error message is:

In file included from /usr/lib/gcc/i386-redhat-linux/4.1.1/../../../../include/c++/4.1.1/backward/iostream.h:31,
                 from cube.cpp:2:
/usr/lib/gcc/i386-redhat-linux/4.1.1/../../../../include/c++/4.1.1/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.



Header File: cube.h  
 
 
#ifndef CUBE_H
#define CUBE_H
 
class Cube
{
public:
	Cube();
	~Cube();
	void setSide(double s);
	double getSide();
	double Area();
	double Volume();
	void Properties();
private:
	double Side;
};
 
#endif
Source File cube.cpp  
 
 
#include <iostream.h>
#include "cube.h"
 
Cube::Cube()
{
}
 
Cube::~Cube()
{
}
 
void Cube::setSide(double s)
{
	Side = s <= 0 ? 1 : s;
}
 
double Cube::getSide()
{
	return Side;
}
 
double Cube::Area()
{
	return 6 * Side * Side;
}
 
double Cube::Volume()
{
	return Side * Side * Side;
}
 
void Cube::Properties()
{
	cout << "Characteristics of this cube";
	cout << "\nSide   = " << getSide();
	cout << "\nArea   = " << Area();
	cout << "\nVolume = " << Volume() << "\n\n";
}
Main File: Exo.cpp  
 
 
#include "cube.h"
 
void main()
{
	Cube cube;
	cube.setSide(-12.55);
	cube.Properties();
 
	Cube de;
	de.setSide(28.15);
	de.Properties();
}

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of evilrix
evilrix
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
BTW: If you can't or don't want to change the code (I'd advise you do) then, as the warning states, you can use the -Wno-deprecated g++ option to remove the warning.

g++ -Wno-deprecated Exo.cpp Cube.cpp -o  test

Additional...

All the old C++ headers that ended in .h were renamed to exclude the .h and the old ones were deprecated. All the C style headers were also renamed to start with a C also with the .h removed. For example, c++ header <string.h> is now called <string> and C header <stdlib.h> is now called <cstdlib>. You should use these new headers in preference to the old ones when writing C++ (When writing C you should prefer to use the original C headers, for example <stdlib.h>). Again, this is to do with placing things int he std:: namespace. It's a little bit of a mess but once you learn the rules it's not that big a deal.

Avatar of akohan
akohan

ASKER


Hi Evilrix,

Thank so much  for your advice. Now, I understand what it means.

About ctags I found it. It is a way of finding the declarations or definitions of enums, functions and classes and so. In big projects it is very helpful.

http://linux.byexamples.com/archives/177/vim-with-ctags/


Regards.


>> Thank so much  
Very welcome and thanks for posting back about CTags.