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

Posted on 2008-06-12
Last Modified: 2012-05-05
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

Question by:akohan
  • 3
LVL 40

Accepted Solution

evilrix earned 500 total points
ID: 21766836
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.
LVL 40

Expert Comment

ID: 21766866
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.


Author Comment

ID: 21766904

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.


LVL 40

Expert Comment

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

Featured Post

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Little introduction about CP: CP is a command on linux that use to copy files and folder from one location to another location. Example usage of CP as follow: cp /myfoder /pathto/destination/folder/ cp abc.tar.gz /pathto/destination/folder/ab…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
Learn how to get help with Linux/Unix bash shell commands. Use help to read help documents for built in bash shell commands.: Use man to interface with the online reference manuals for shell commands.: Use man to search man pages for unknown command…

809 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question