I have created a project with about 7 files including 3 header files and 3 implementation files. I am getting a multiple definition error when compiling for one specific file of class. I have checked that if there is more than one allocation of storage for identifiers, this error arises. But I don’t see where the problem lies. Any suggestions?

//ItemType.h
#ifndef ItemType_hpp     // I was told to include this directives
#define ItemType_hpp
 
#include <fstream>
#include <iostream>
#include "StrTypeAugmented.h"
 
const int MAX_ITEMS = 25; 
 
enum RelationType {LESS, EQUAL, GREATER};
class HouseType
{ 
  public:
         void GetFromFile(std::ifstream&); 
         void WriteToFile(std::ofstream&); 
         void GetFromUser(); 
         void PrintHouseToScreen(); 
         void GetNameFromUser(); 
         void PrintNameToScreen(); 
         RelationType ComparedTo(HouseType); 
 
  private:
         StrType lastName; 
         StrType firstName; 
         StrType address; 
         float price; 
         int squareFeet; 
         int bedRooms; 
}; 
#endif
**********************************
// ItemType.cpp
#include "ItemType.h"
 
typedef HouseType ItemType;
 
using namespace std;
// ItemType.cpp is the implementation file for data for the real 
//  estate manipulation program.
 
void HouseType::GetFromFile(std::ifstream& file) 
{
  lastName.GetStringFile(true, NOT_NEW, file);
  firstName.GetStringFile(true, NOT_NEW, file);
  address.GetStringFile(true, NOT_NEW, file);
  file >> price >> squareFeet >> bedRooms;
}
 
void HouseType::WriteToFile(std::ofstream& file)
{
 
  lastName.PrintToFile( false, file);
  firstName.PrintToFile(true, file);
  address.PrintToFile(true, file);
  file << endl << price << endl;
  file << squareFeet << endl;
  file << bedRooms << endl;
}
 
void HouseType::GetFromUser() 
{
 
  cout << "Enter last name; press return." << endl;
  lastName.GetString(true, NOT_NEW);
  cout << "Enter first name; press return." << endl;
  firstName.GetString(true, NOT_NEW);
  cout << "Enter address; press return." << endl;
  address.GetString(true, NOT_NEW);
  cout << "Enter price, square feet, number of bedrooms;"
       << " press return." << endl;
  cin >> price >> squareFeet >> bedRooms;
}
 
void HouseType::PrintHouseToScreen()
{
  
  firstName.PrintToScreen( false);
  cout << " ";
  lastName.PrintToScreen( false);
  address.PrintToScreen(true);
  cout << endl << "Price: " << price << endl;
  cout << "Square Feet: " << squareFeet << endl;
  cout << "Bedrooms: " << bedRooms << endl;
}
 
void HouseType::GetNameFromUser() 
{
  
  cout << "Enter last name;  press return." << endl;
  lastName.GetString(true, NOT_NEW);
  cout << "Enter first name;  press return." << endl;
  firstName.GetString(true, NOT_NEW);
}
 
void HouseType::PrintNameToScreen()
{
  
  firstName.PrintToScreen( false);
  cout << " ";
  lastName.PrintToScreen( false);
  cout << endl;
}
 
RelationType HouseType::ComparedTo(HouseType house)
{
  if (lastName < house.lastName)
    return LESS;
  else if (house.lastName < lastName)
    return GREATER;
  else if (firstName < house.firstName)
    return LESS;
  else if (house.firstName < firstName)
    return GREATER;
  else return EQUAL;
}

ERROR:
multiple definition of `HouseType::GetFromFile(std::basic_ifstream<char, std::char_traits<char> >&)'
first defined here
multiple definition of `HouseType::WriteToFile(std::basic_ofstream<char, std::char_traits<char> >&)'
etc..

Recommended Answers

All 2 Replies

You haven't posted the code that's causing this error..
Post the XXX.cpp if your error message says first defined in XXX.o..
Of course first check if you havn't #included ItemType.cpp..

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.