help debug linker errors

Started by
0 comments, last by fpsgamer 15 years, 11 months ago
i got my code to finally compile but, now im getting 5 linker errors that i have no idea why im throwing them the errors are:
[source=cpp]
football.obj : error LNK2019: unresolved external symbol "public: void __thiscall Football::SearchMatches(struct Match * * const,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?SearchMatches@Football@@QAEXQAPAUMatch@@HV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) referenced in function "public: void __thiscall Football::RunFootball(void)" (?RunFootball@Football@@QAEXXZ)
football.obj : error LNK2019: unresolved external symbol "public: void __thiscall Football::ReadLastSearchWord(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,int &)" (?ReadLastSearchWord@Football@@QAEXAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAH@Z) referenced in function "public: void __thiscall Football::RunFootball(void)" (?RunFootball@Football@@QAEXXZ)
football.obj : error LNK2019: unresolved external symbol "public: void __thiscall Football::SearchMatches(struct Match * * const,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?SearchMatches@Football@@QAEXQAPAUMatch@@HV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: void __thiscall Football::RunFootball(void)" (?RunFootball@Football@@QAEXXZ)
football.obj : error LNK2019: unresolved external symbol "public: void __thiscall Football::WriteLastSearchWord(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?WriteLastSearchWord@Football@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: void __thiscall Football::RunFootball(void)" (?RunFootball@Football@@QAEXXZ)
D:\Documents and Settings\shadowfire36\Desktop\whochamp_do_not _edit\ed2\whos_the champ\Debug\whos_the champ.exe : fatal error LNK1120: 4 unresolved externals

here is new code and header football.h
[source=cpp]
#ifndef FOOTBALL_H
#define FOOTBALL_H


#include <iostream>
#include <fstream>
#include <string>
#include "Message.h"


using namespace std;

// definition of strct that will hold all information of match
struct Match
{
	string Season;
	string Team1;
	string Team2;
	string Result;
};



class Football : public Message  
{ 
public:

	void WriteLastSearchWord(string word);
	void ReadLastSearchWord(string &team, int &record);
	void SearchMatches(Match *matches[],int size,string TeamName);
	void SearchMatches(Match *matches[],int size,string TeamName, int record);
	void  RunFootball();
	Football(string *footBallData);


	
	


	
protected:	
	
	string &footBallSave;
	string team;
	
	


};

#endif 

football.cpp
[source=cpp]
 #include <iostream>
#include <fstream>
#include <string>
#include "Football.h"
#include "Message.h"


using namespace std;



//Search within array of matches and display the results
void SearchMatches(Match* matches,int size,string TeamName)
{
	//declare the result array
	Match SearchResult[2000];
	//initalize the result counter
	int SearchResultCount=0;

	int SelectedNumber;

	//search within the matches array
	for(int i=0;i<size;i++)
	{
		//check if the entered name is the team1 or team2 in the match
		if(matches.Team1==TeamName || matches.Team2==TeamName)
			{
				//update the search result counter
				SearchResultCount++;
				//display the seasons
				cout<<endl<<"("<<SearchResultCount<<") "<<matches.Season;
				//store the matched match in the search result array
				SearchResult[SearchResultCount] = matches;
			}
	}
	cout << endl;

	//check for results
	if(SearchResultCount>0)
	{
		cout << "which year would you like to view results "<<endl;
		cin>>SelectedNumber;

		SelectedNumber;
		
	ofstream myfile;
	myfile.open("nflSave.txt",ios::app);
	myfile << endl << SelectedNumber;
	myfile.close();
		
		//display the match information
		cout<<SearchResult[SelectedNumber].Season<<endl;
		cout<<SearchResult[SelectedNumber].Team1<<endl;
		cout<<"Over"<<endl;
		cout<<SearchResult[SelectedNumber].Team2<<endl;
		cout<<SearchResult[SelectedNumber].Result<<endl;
	}
	else cout<<"No search result";
	cout<<endl;
}
void SearchMatches(Match* matches,int size,string TeamName, int record)
{
	//declare the result array
	Match SearchResult;
	//initalize the result counter
	int SearchResultCount=0;

	//int SelectedNumber;

	//search within the matches array
	for(int i=0;i<size;i++)
	{
		//check if the entered name is the team1 or team2 in the match
		if(matches.Team1==TeamName || matches.Team2==TeamName)
			{
				//update the search result counter
				SearchResultCount++;
				if (SearchResultCount == record)
				{
					//store the 
				//display the seasons
				//cout<<endl<<"("<<SearchResultCount<<") "<<matches.Season;
				
			     //store the matched match in the search result array
				SearchResult = matches;
					break;
				}
			}
	}
	cout<<endl;

	//check for results
	if(SearchResultCount>0)
	{
		//display the match information
		cout<<SearchResult.Season<<endl;
		cout<<SearchResult.Team1<<endl;
		cout<<"Over"<<endl;
		cout<<SearchResult.Team2<<endl;
		cout<<SearchResult.Result<<endl;
	}
	else cout<<"No search result";
	cout<<endl;
}

// This function is used for storing the last search keyword entered to the recallteam.txt
void WriteLastSearchWord(string word)
{
	ofstream myfile;
    myfile.open("nflSave.txt");
    myfile << word;
    myfile.close();
}

// This function is used for read the last search keyword enter from the recallteam.txt
void ReadLastSearchWord(string &team, int &record)
{
	ifstream inFile("nflSave.txt");
	getline(inFile, team);
	inFile >> record;
	inFile.close();
}



void Football::RunFootball()
{	
	
	ifstream inFile("nfl.txt");
	//initailze the matches ( array of strcuts )
	Match *matches[2000];

	// create input stream for file
	

	//It will holds the read lines from the file
	string Buffer;

	// check if the file is exist 
	if(!inFile.is_open())
	{
		//display the error message
		//cout<<"Failed to open file"<<endl;
		cerr << " File is Missing";
	}

	// initalize the counter
	int matchesCounter=0;
	while(!inFile.eof())
	{                                        //&Match::operator =(const Match &)
		//read season
		matches[matchesCounter] = new Match;
		getline(inFile,Buffer);
		matches[matchesCounter]->Season = Buffer;
		//read team1 name
		getline(inFile,Buffer);
		matches[matchesCounter]->Team1  = Buffer;
		//read the "over" string
		getline(inFile,Buffer);
		//read team2 name
		getline(inFile,Buffer);
		matches[matchesCounter]->Team2 = Buffer;
		//read result
		getline(inFile,Buffer);
		matches[matchesCounter]->Result = Buffer;
		//read the empty line
		getline(inFile,Buffer);
		//update the matches counter
		matchesCounter++;
	}

	
	//its used for Main menu selection
	char Check='1';

	while(Check !='3')
	{
		//Display the main menu
	
		cin>>Check;
    
		switch(Check)
		{
			//Search 
		case '1':
			{
				string TeamName="";
				
				getline(cin,TeamName);
				system("cls");
				cout << "Please Enter Team City And Team Name" <<endl;
				getline(cin,TeamName);//free's buffer
				WriteLastSearchWord(TeamName);
				SearchMatches(matches,matchesCounter,TeamName);
				break;
			}
			//Display the last search team
		case '2':
			{
				string team;
				int record;
				ReadLastSearchWord(team, record);
				system("cls");
				cout << "Last Recorded Viewed" <<endl;
				SearchMatches(matches,matchesCounter ,team , record);
	           
				break;
			}
			//Exit the program
		case '3':
			{
				exit(0);
			}
		default:continue;
		
		}
	}
}

Advertisement
In football.cpp you forgot to prefix some of your functions with the class name and scope resolution operator.

For example this:

void SearchMatches(Match* matches,int size,string TeamName, int record)
{
...
}

Should be this:

void Football::SearchMatches(Match* matches,int size,string TeamName, int record)
{
...
}

This topic is closed to new replies.

Advertisement