-1

I have been getting redefinition errors when I compile these files. I have looked through questions on SO regarding the same, but am unable to find where I am wrong.
Here are the files :-

     #ifndef UTILITY_H
     #define UTILITY_H

     //------------//
     //HEADER FILES//
   //------------//
#include <string>
#include <map> 
#include <fstream>  

//----------------------------//
/* Declaration of the class. */ 
// ---------------------------//  
class Utility
{
 public:
  static std::ofstream out ;
  static std::ofstream music ; 
  static std::ofstream video ; 
  static std::ofstream document ;
  static std::ofstream mp3 ; 
  static std::ofstream mp4 ; 
  static std::ofstream html ; 
  static std::ofstream deb ; 
  static std::ofstream cpp ;
  static std::ofstream c ;
  static std::ofstream py ; 
  static std::ofstream php ; 
  static std::ofstream java ; 
  static std::ofstream _class ;
  static std::ofstream so ;
  static std::ofstream master ; 
  static std::string lastPath ;
  static std::map<std::string, std::string> records ; 
  static bool openStream() ;  // to open the stream for indexing.
  static void index(std::string) ;   // to index.
  static bool closeStream() ; // to  close the streams after indexing.
  static void loadTree() ;  // to load the Tree at the start of the application.
  static void search(std::string, int) ; // to search for the required keyword. 
} ;  
#endif 

Here is the utility.cpp file in which I have my implementation :-

    #include "utility.h" 
    using namespace std ; 
/* The functions are in the temp.cpp file fo testing purposes. */ 

// -------------------------------------------------------//
/* Definition of the static variables outside the class. */ 
// ------------------------------------------------------//
ofstream Utility::out ;
ofstream Utility::music ; 
ofstream Utility::video ;
ofstream Utility::document ;     
string Utility::lastPath ; 
ofstream Utility::mp3 ; 
ofstream Utility::mp4 ; 
ofstream Utility::html ;
ofstream Utility::deb ; 
ofstream Utility::cpp ; 
ofstream Utility::c ;  
ofstream Utility::py ; 
ofstream Utility::php ;
ofstream Utility::java ; 
ofstream Utility::_class ; // because class is a keyword in c++. 
ofstream Utility::so ;
ofstream Utility::master ; 

The errors I am getting is :-

utility.cpp:18:19: error: redefinition of ‘std::ofstream Utility::c’ utility.h:72:10: error: ‘std::ofstream Utility::c’ previously declared here

and so on for every static variable in Utility class.

Can anybody please tell me what I am doing wrong here ?

9
  • 3
    The std namespace is... where exactly in your .cpp file? The second line of that error message that you decided not to paste would be extremely telling, btw. I.e. where is "here" ? Commented Jun 8, 2014 at 7:48
  • I am unable to understand what do you mean to say? Commented Jun 8, 2014 at 7:50
  • @WhozCraig Updated the question with exact error message Commented Jun 8, 2014 at 7:52
  • 1
    Thanks. Now, how does utility.cpp know that ostream is in the std namespace ? Is there a reason you didn't fully specify the namespace in your .cpp file as you did in your header? There are 10 lines of code you clipped out of the top of utility.cpp before your class vars are defined. Any chance of seeing those? Commented Jun 8, 2014 at 7:53
  • @WhozCraig Thanks for the reply. Those lines before the variables were defined were just comments and also, I had mentioned std in utility.cpp. I just forgot to mention it in the code I posted here. Updated that Commented Jun 8, 2014 at 7:59

2 Answers 2

2

The posted header above is missing an endif. That could certainly cause your bug. Was that a transcription error?

Sign up to request clarification or add additional context in comments.

3 Comments

Actually there is a #endif as well as using namespace std in the actual code file, I just missed to put it here in the code which I have posted. Correcting the same.
Could you tell us the compiler. Because using gcc 4.9 on Linux, as long as I link stdc++ (-lstd++), and write a empty main It compiles, and links for me. See (stackoverflow.com/questions/9447428/…) for more info on stdc++
I am using g++ 4.6.3 on ubuntu 12.04 64 bit.
1

Use explicit namespace while defining all your variables in your source file:

std::ofstream Utility::out;

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.