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 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

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 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
	void setSide(double s);
	double getSide();
	double Area();
	double Volume();
	void Properties();
	double Side;
Source File cube.cpp  
#include <iostream.h>
#include "cube.h"
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 de;

Open in new window

Who is Participating?

Improve company productivity with a Business Account.Sign Up

evilrixConnect With a Mentor Senior Software Engineer (Avast)Commented:
The warning is telling you that you are using deprecated features of C++. In this case, if you look at line 25 you'll see you include <iostream.h> rather than <iostream>. The former header is deprecated by the C++ Standard. THis was done when namespaces were introduce into the langauge. The code in iostream.h isn't in a namespace, whereas the code in iostream will be in the std:: namespace. You should prefer to use the correct header in you code and use a using namespace std; clause if necessary. Try chaning this and the warning should go, I couldnt' see any other obvious sign of deprecated use in your cade.

I don't know about vim ctags... sorry.
evilrixSenior Software Engineer (Avast)Commented:
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


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.

akohanAuthor Commented:

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.


evilrixSenior Software Engineer (Avast)Commented:
>> Thank so much  
Very welcome and thanks for posting back about CTags.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.