Solved

Passing a data structure by reference causes lnk2019 error

Posted on 2008-10-05
3
318 Views
Last Modified: 2013-12-14
I'm pasting the code below, and the function in question at the top again.  
The function immediately below causes the error.  If I pass by value, it doesn't throw the error at me.  I've also posted the error below.

Thanks!

void fnCalculate(userInput& tempVar1){
}

Error      1      error LNK2019: unresolved external symbol "void __cdecl fnCalculate(struct userInput)" (?fnCalculate@@YAXUuserInput@@@Z) referenced in function "void __cdecl fnGetUserInput(void)" (?fnGetUserInput@@YAXXZ)      main.obj      

#include <iostream>
using namespace std;
struct userInput{
	int units;
	int session;
	int residency;
	char parking;
	char sticker;
	char IDCard;
};
char fnTryAgain(char);
void fnGetUserInput();
void fnCalculate(userInput);
int main()
{
	int varAnswer=1;	
	cout << "Programing running..." <<endl;
	cout << "SMC Fee Calculator."<<endl;		
	while (varAnswer == 1)
	{
	fnGetUserInput();
	varAnswer = fnTryAgain(' ');
	}
	return 0;
}
void fnGetUserInput()
{
	userInput strInput;
	cout << "Enter the number of units enrolled: ";
	cin >> strInput.units;
	cout << "Is this Fall[0], Winter[1], Spring[2] or Summer[3]: ";
	cin >> strInput.session;
	cout << "Are you a state resident[0], non-resident[1] or F1 Visa holder[2]: ";
	cin >> strInput.residency;
	cout << "Do you want a parking decal [y/n]: ";
	cin >> strInput.parking;
	cout << "Do you want an AS sticker [y/n]: ";
	cin >> strInput.sticker;
	cout << "Do you want an ID card [y/n]: ";
	cin >> strInput.IDCard;
	fnCalculate(strInput);
}
 
void fnCalculate(userInput& tempVar1){
 
}
char fnTryAgain(char varReply2)
{
	char varReply1=' ', varReply=' ';
	cout << endl << endl << "Try another scenario?  Enter n for no, any other key for yes: ";
	cin >> varReply1;
	if (varReply1 == 'n'){
		varReply = 0;
	}
	else if (varReply1 == 'N'){
		varReply = 0;
	}
	else
		varReply = 1;
	return varReply;
}

Open in new window

0
Comment
Question by:mike_hale
  • 2
3 Comments
 
LVL 55

Accepted Solution

by:
Jaime Olivares earned 500 total points
ID: 22644382
both the declaration of the function and the implementation must match the same type of arguments.
So, your declaration at line 13:

     void fnCalculate(userInput);

should be:

     void fnCalculate(&userInput);

to match the implementation at line 44
0
 
LVL 3

Author Comment

by:mike_hale
ID: 22645622
*slaps forehead*

Duh!  That worked.  Thank you Jaime!  
0
 
LVL 3

Author Closing Comment

by:mike_hale
ID: 31503150
Thank you!  
0

Featured Post

NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In Easy String Encryption Using CryptoAPI in C++ (http://www.experts-exchange.com/viewArticle.jsp?aid=1193) I described how to encrypt text and recommended that the encrypted text be stored as a series of hexadecimal digits -- because cyphertext may…
Update (December 2011): Since this article was published, the things have changed for good for Android native developers. The Sequoyah Project (http://www.eclipse.org/sequoyah/) automates most of the tasks discussed in this article. You can even fin…
THe viewer will learn how to use NetBeans IDE 8.0 for Windows to perform CRUD operations on a MySql database.
The viewer will learn how to synchronize PHP projects with a remote server in NetBeans IDE 8.0 for Windows.

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question