|
Hello to all,
I never understand linker errors in visual studio,
I bring my class declaration, and the errors.
please advice me what to do.
header:
class Employee
{
public:
Employee(char* name, int hourFee, int hoursPerMonth, int overTime);
Employee(char* name, int hourFee, int hoursPerMonth);
Employee(char* name, int hourFee);
static int _minimumFee;
static int _maximumHours;
int getSalary();
void print();
int getHourFee();
void setHourFee(int hourFee);
int gethoursPerMonth();
void setHoursPerMonth(int hours);
private:
char* _name;
int _hourFee;
int _hoursPerMonth;
int _overTime;
};
implementation:
#include"Employee.h"
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
Employee::Employee(char* name, int hourFee, int hoursPerMonth, int overTime)
{
_name = strdup(name);
_hourFee = hourFee;
_hoursPerMonth = hoursPerMonth;
_overTime = overTime;
Employee::_minimumFee = 3600;
Employee::_maximumHours= 190;
}
Employee::Employee(char* name, int hourFee, int hoursPerMonth)
{
Employee::Employee(name, hourFee, hoursPerMonth, 0);
}
Employee::Employee(char* name, int hourFee)
{
Employee::Employee(name, hourFee, 160, 0);
}
int Employee::getSalary()
{
return (_hourFee * _hoursPerMonth) + (_overTime * (_hourFee * 2));
}
void Employee::print()
{
cout << "Employee, " << _name << " Salary = " << getSalary() << " hour Fee = " << _hourFee
<< " hours of work per month " << _hoursPerMonth << " over hours made = " << _overTime << endl;
}
void Employee::setHourFee(int hourFee)
{
if (hourFee < Employee::_minimumFee)
{
cout << "can't underpay a worker!!!" << endl;
return;
}
else
{
_hourFee = hourFee;
}
}
int Employee::getHourFee()
{
return _hourFee;
}
int Employee::gethoursPerMonth()
{
return _hoursPerMonth;
}
void Employee::setHoursPerMonth(int hours)
{
if(hours > Employee::_maximumHours)
{
_hoursPerMonth = 190;
_overTime = (hours - _hoursPerMonth);
}
else
{
_hoursPerMonth = hours;
}
}
ERRORS:
error LNK2019: unresolved external symbol "public: static int Employee::_maximumHours" (?_maximumHours@Employee@@2HA) referenced in function "public: __thiscall Employee::Employee(char *,int,int,int)" (??0Employee@@QAE@PADHHH@Z) Employee.obj
Error 3 error LNK2019: unresolved external symbol "public: static int Employee::_minimumFee" (?_minimumFee@Employee@@2HA) referenced in function "public: __thiscall Employee::Employee(char *,int,int,int)" (??0Employee@@QAE@PADHHH@Z) Employee.obj <br />
please help me.
|
|
|
|
|
You need to create a actual instance of your static member variables.
Add something like this to the CPP file (outside of any methods/functions)...
int Employee::_minimumFee = ...;
int Employee::_maximumHours = ...; Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
how come I can't define the static variable in the .h with all other members,
and initiate it in the constructor?
isn't it a basic thing we might wanna do?
how exactly does it work?
thanks a lot for the reply.
till you answer I will do what you said
|
|
|
|
|
With static member variables, only one instance exists that is shared between all objects of
the class. It is your responsibility to provide that one instance somewhere.
Because the static member variables are shared between all objects of the class, it doesn't make much
sense for every new object of the class to re-initialize the variables.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
and y do I redefine it by again specifying it's an int,
after doing it in the header?
|
|
|
|
|
You're not redefining it.
It's declared in the class declaration (.h file), defined in the cpp file (or wherever you choose to define it).
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
ohhhhhhh thanks man, you brought me back.
you helped me alot Mark.
I feel you disliked the question I asked, maybe because it's a newbe question,
so I am sorry man, but it got me all mixed up and again I thank you for your help
|
|
|
|
|
gizmokaka wrote: I feel you disliked the question I asked, maybe because it's a newbe question
Not at all! We're all newbies at some point - I'm often a newbie!
Cheers,
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
MICROSOFT MVP I some how doubt you are a newbe
|
|
|
|
|
I have lots of experience with C++, but there's so many different technologies
that most of the time I feel I know barely anything.
For example, I'd be a total newbie if I tried to build a website
Cheers,
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
thanks for the encouragement.
have a great day.
|
|
|
|
|
Hi.
I'm reading C++ Primer Plus Fifth Edition by Stephen Prata. Chapter 7, page 326 : Ruler.cpp
example tries to explain how to write a interesting program. You see the code below and guess what? I see it too but it's just to complicated and the books explanation is not making that clearer. If i can't get it there is no point to continue to study c++. so i hope you can give me a hint
<b>CODE: </b>
#include <iostream>
using namespace std;
const int Len = 66;
const int Divs = 6;
void subdivide(char ar[], int low, int high, int level);
int main()
{
char ruler[Len];
int i;
for (i = 1; i < Len - 2; i++)
ruler[i] = ' ';
ruler[Len - 1] = '\0';
int max = Len - 2;
int min = 0;
ruler[min] = ruler[max] = '|';
std::cout << ruler << std::endl;
for (i = 1; i <= Divs; i++)
{
subdivide(ruler,min,max, i);
std::cout << ruler << std::endl;
for (int j = 1; j < Len - 2; j++)
ruler[j] = ' '; // reset to blank ruler
}
cin.get();
cin.get();
return 0;
}
void subdivide(char ar[], int low, int high, int level)
{
if (level == 0)
return;
int mid = (high + low) / 2;
ar[mid] = '|';
subdivide(ar, low, mid, level - 1);
subdivide(ar, mid, high, level - 1);
}
int life()
{
in a land with no bird, no spring. My first journey was a
return 0;
}
|
|
|
|
|
pourang wrote: so i hope you can give me a hint
Which statement is giving you trouble?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Hello everyone,
For entry point of a console application,
http://msdn2.microsoft.com/en-us/library/f9t8842e(VS.71).aspx
My understanding is it is important that the name of the function main exists, and it does not matter the prototype of main function, for example,
we can define main as int main () or int main (int argc, char** argv).
Is that understanding correct?
thanks in advance,
George
|
|
|
|
|
This[^] MSDN article defines the requirements for main() .
As a general rule, if you don't match the expected prototype, you can get linker errors.
Software Zen: delete this;
|
|
|
|
|
Thanks Gary,
Good reference. I want to confirm with you that,
int main( int argc[ , char *argv[ ] [, char *envp[ ] ] ] );
means three forms of main is legal?
int main( int argc);
int main( int argc, char *argv);
int main( int argc, char *arg[], char *envp[]);
regards,
George
|
|
|
|
|
When I am quickly throwing something together, I often use:
void main( void )
{
} It's not compliant, but not everything has to be.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Thanks DavidCrow!
regards,
George
|
|
|
|
|
Hello,
I wanted to use SQLExec() but I did not get enough information about it.
Actually I wanted to store and use multiple SQL queries through CDatabase class .But I was unable to do it.
Is there any link available.
I did search through Google but finally I had to pose this question.
Sorry for te same.
Prithaa
|
|
|
|
|
Did you see Database section on the codeproject?
|
|
|
|
|
I agree with Hamid. This is probably more related to SQL than to the MFC classes you're using.
I would suggest asking on the SQL/ADO/ADO.NET board[^]
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hello,
Ok May be you are right but how can I ask this question to SQL board since I want to run SQL through VC++.
SQLExec() API seems right to execute multiple queries.
I wanted to know how should I use SQLExec() and how do I pass this handle (SQLHstmt StatementHandle) and what is the meaning of this SQL handle.
Where is the Database section of codeproject ?
Prithaa
|
|
|
|
|
prithaa wrote: I wanted to know how should I use SQLExec() and how do I pass this handle (SQLHstmt StatementHandle) and what is the meaning of this SQL handle.
I don't know what SQLExec() is, but I'm assuming you want to use ODBC
because you mentioned SQLHSTMT. If that's the case, you may want to study
this: Microsoft Open Database Connectivity (ODBC)[^]
The CDatabase and CRecordset MFC classes are wrappers for the ODBC APIs, handles,
etc. and are a bit easier to use than the straight APIs.
For the actual SQL queries, I still say your best bet is the SQL board.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
prithaa wrote: Actually I wanted to store and use multiple SQL queries through CDatabase class .But I was unable to do it.
Why not?
CDatabase db;
db.SQLExec("CREATE TABLE ...");
...
db.SQLExec("DROP TABLE ..."); Now if you actually wanted to have a result set sent back to you, you'd also need to use a CRecordset object.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
hi all,
I'am having a new tool bar with 5 buttons in my appication. Each button opens a form.
Now i should like to know how to automatically close the first form, when second form is opening ? like wise for all forms.
so at present time only one form should be visible.
can u please answer this question.
thanks
panthal
|
|
|
|