Hello everyone,

I am a C++ newbie and I am running into some linking errors. I am using Vi to compile and link my code.

Here are the linking errors:
assign6.o: In function `cAccountList::cAccountList()':
assign6.cpp:(.text+0x1db): undefined reference to `cAccount::cAccount()'
assign6.o: In function `cAccountList::cAccountList()':
assign6.cpp:(.text+0x22b): undefined reference to `cAccount::cAccount()'
assign6.o: In function `cAccountList::sort_by_ID()':
assign6.cpp:(.text+0x676): undefined reference to `cAccount::cAccount()'
collect2: ld returned 1 exit status

here is my code:

//Assignment #6 due 2-8-2010
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
//global declarations
typedef char Name_t[15];
typedef fstream Infile_t;
typedef fstream Outfile_t;
typedef char Filename_t[50];
//*****************************************************************************************
//classes
class cAccount
{
	private:
		int accountID;
		Name_t accountName;//(last,first)
		float accountBal;
	public:
		cAccount();
		int get_accountID(int &accountID)
		{ accountID=this->accountID; return accountID;};
		void read(Infile_t &Infile);
		void print(Outfile_t &Outfile);
		void display();
};//end of cAccount
class cAccountList
{
	private:
		static const int MAXARRAYSIZE=51;
		int counter;
		typedef cAccount AccountArray[MAXARRAYSIZE];
		AccountArray AccountList;
	public:
		cAccountList();
		void load_data(Infile_t &Infile);
		void print_to_outfile(Outfile_t &Outfile);
		void print_to_screen();
		void sort_by_ID();
};//end of cAccountList
//*****************************************************************************************
//class cAccount functions
void cAccount::read(Infile_t &Infile)
{ Infile>>accountID>>accountName>>accountBal; };
//end of cAccount::Read
void cAccount::print(Outfile_t &Outfile)
{ 
	Outfile<<"	"<<accountID<<"	"<<accountName<<"	"<<accountBal<<endl;
	Outfile<<"_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_"<<endl;
};//end of print
void cAccount::display()
{
	cout<<"	"<<accountID<<"	"<<accountName<<"	"<<accountBal<<endl;
	cout<<"***********************************************************"<<endl;
};//end of display
//*****************************************************************************************
//class cAccountList functions  
cAccountList::cAccountList()
{ counter=0; };//default constructors
void cAccountList::load_data(Infile_t &Infile)
{
	Filename_t Filename;
	cout<<"Please enter the name of the datafile to be used:"<<endl;
	cin>>Filename;
	Infile.open(Filename,ios::in);
	AccountList[counter].read(Infile);
	while(!Infile.eof())
	{
		counter=counter+1;
		AccountList[counter].read(Infile);
	}//end while
	Infile.close();
	cout<<"Datafile read....SUCCESS!"<<endl;
};//end of read_data
void cAccountList::print_to_outfile(Outfile_t &Outfile)
{
	Filename_t Filename;
	cout<<"Please enter the name of the output file:"<<endl;
	cin>>Filename;
	Outfile.open(Filename,ios::out);
	Outfile<<"**************************************************************"<<endl;
	Outfile<<"	"<<"ACCOUNT_ID#"<<"	"<<"ACCOUNT_NAME"<<"	"<<"ACCOUNT_BALANCE"<<endl;
	Outfile<<"**************************************************************"<<endl<<endl;
	for(int I=0; I<counter; I++)
	{
		AccountList[I].print(Outfile);
	}//end for
	Outfile.close();
	cout<<"Outfile write...SUCCESS!"<<endl<<endl;
};//end print_to_outfile
void cAccountList::print_to_screen()
{
	cout<<"Generating preview of output....."<<endl<<endl;
	cout<<"**************************************************************"<<endl;
	cout<<"	"<<"ACCOUNT_ID#"<<"	"<<"ACCOUNT_NAME"<<"	"<<"ACCOUNT_BALANCE"<<endl;
	cout<<"**************************************************************"<<endl<<endl;
	for(int I=0; I<counter; I++)
	{
		AccountList[I].display();
	}//end for
}//end print_to_screen
void cAccountList::sort_by_ID()
{
	int I,Pass;
	int accountID;
	AccountArray temp;
	for(Pass=1; Pass<counter-1; Pass++)
	{
		for(I=0; I<counter-1; I++)
		{
			if(AccountList[I].get_accountID(accountID) < AccountList[I+1].get_accountID(accountID));
			{
				temp[I]=AccountList[I];
				AccountList[I]=AccountList[I+1];
				AccountList[I+1]=temp[I];
			}//end if
		}//end inside for
	}//end outside for
}//end sort_by_ID
//*********************************************************************************************************
//main
int main()
{
	Infile_t Infile;
	Outfile_t Outfile;
	cAccountList ACCOUNT;
	ACCOUNT.load_data(Infile);
	ACCOUNT.sort_by_ID();
	ACCOUNT.print_to_outfile(Outfile);
	ACCOUNT.print_to_screen();
	return 0;
}//end main

It appears they are all revolving around a singular issue in my code but I dont really understand at all whats wrong.

Any help would be much appericiated

>>undefined reference to `cAccount::cAccount()'

That means you defined a constructor in the class but never coded the implementation function.

>>undefined reference to `cAccount::cAccount()'

That means you defined a constructor in the class but never coded the implementation function.

does this mean that i have to call something like

cAccountList::cAccountList();

in main?

I dont really understand because I put the constructor in both classes

No you don't call it -- but you do have to write the implementing code for it, something similar to the way you write implementing code for the other class methods.

CAccount::CAccount()
{
    // initialize class variables here
}

>>I dont really understand because I put the constructor in both classes
I see CAccountList() constructor but not CAccount().

Edited 6 Years Ago by Ancient Dragon: n/a

This question has already been answered. Start a new discussion instead.