0

I'm writing basic C++ code to practice using fstream and header files. I keep getting the following error:

initializer.cpp:(.text+0xd9): undefined reference to `DataSet::DataSet(int, std::basic_string, std::allocator >, std::basic_string, std::allocator >, double)' collect2: ld returned 1 exit status

Here's the main:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include "dataset.h"
using namespace std;

int main()
{
  ofstream outData("data.txt",ios::binary);

  if(!outData)
  {
    cerr<<"\nFile could not be opened!\n";
    exit(1);
  }

  DataSet blankData;

  for(int i=0;i<100;i++)
    outData.write(reinterpret_cast<const char *>(&blankData),
      sizeof(DataSet));

  return 0;
}

and the header:

#ifndef DATASET_H
#define DATASET_H

#include <string>
using namespace std;

class DataSet
{
public:
  DataSet(int=0,string="",string="",double=0.0);

  void setAccountNumber(int);
  int getAccountNumber() const;

  void setLastName(string);
  string getLastName() const;

  void setFirstName(string);
  string getFirstName() const;

  void setBalance(double);
  double getBalance() const;
private:
  int accountNumber;
  char lastName[15];
  char firstName[10];
  double balance;
};

#endif

and the corresponding .cpp:

#include <string>
#include "dataset.h"

DataSet::DataSet(int accountNumberValue,
  string lastNameValue,string firstNameValue,
  double balanceValue)
{
  setAccountNumber(accountNumberValue);
  setLastName(lastNameValue);
  setFirstName(firstNameValue);
  setBalance(balanceValue);
}

int DataSet::setAccountNumber(int accountNumberValue)
{
  accountNumber=accountNumberValue;
}

void DataSet::getAccountNumber() const
{
  return accountNumber;
}

string DataSet::setLastName(string lastNameString)
{
  const char *lastNameValue=lastNameString.data();
  int length=lastNameString.size();
  length=(length<15?length:14);
  strncpy(lastName,lastNameValue,length);
  lastName[length]='\0';
}

void DataSet::getLastName() const
{
  return lastName;
}

string DataSet::setFirstName(string firstNameString)
{
  const char *firstNameValue=firstNameString.data();
  int length=firstNameString.size();
  length=(length<10?length:9);
  strncpy(firstName,firstNameValue,length);
  firstName[length]='\0';
}

void DataSet::getFirstName() const
{
  return firstName;
}

double DataSet::setBalance(double balanceValue)
{
  balance=balanceValue;
}

void DataSet::getBalance() const
{
  return balance;
}
Philip Rogers
  • 1
  • 1
  • 1
  • 1
  • And you linked **all** the compiled object code modules into your program? [See this document](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix). Specifically the fourth answer. – WhozCraig Oct 09 '13 at 04:01

1 Answers1

1

The linker doesn't find "DataSet::DataSet()" symbol used in Initializer object. It can happen if object file generated for corresponding cpp is not linked together with Initializer, sometimes it might happen because you didn't add corresponding cpp to project/makefile.

Iuri Covalisin
  • 645
  • 4
  • 7