Программа перегрузки операторов. При компиляции выдает следующие ошибки
error LNK1120: неразрешенных внешних элементов: 1
error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall stud::stud(char,float,float,int)" (??0stud@@QAE@DMMH@Z) в функции _main
Код программы:
Код:
#include <stdio.h>
#include<conio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <stdio.h>
#include <iomanip>
#include <time.h>
#include <clocale>
#include <fstream>
#include<iostream>
#include<cstdlib>
#define N 3
using namespace std;
class stud{
char klass;
float mass;
float chast;
int chisl;
public:
stud operator = (stud &o1);
int operator == (stud &o1);
stud operator + (stud &o1);
stud() { mass=0; chast=0; chisl=0;}
friend ostream & operator<<(ostream &stream, stud &o1);
friend istream & operator>>(istream &stream, stud &o1);
friend void shapka(void);
friend void linebuild(void);
friend int isvalid(int a, int b);
stud(char klass, float mass, float chast, int chisl );
void setall(char a,float m, float n,int s){
klass=a;
mass=m;
chast=n;
chisl=s;}
void getall( char &a,float &m, float &n, int &s){
a=klass;
m=mass;
n=chast;
s=chisl;
cout<<a<<" ";
cout<<m<<" ";
cout<<n<<" ";
cout<<s<<" ";
//cout<<a<<m<<n<<s;
}
void showall(){
cout<<klass<<" ";
cout<<mass<<" ";
cout<<chast<<" ";
cout<<chisl<<" ";}
};
int isvalid(int a, int b){
if (((a>N-1) || (a<0)) || ((b>N-1) ||(b<0)))
{
cout<<"Ошибка! Экземпляра с таким индексом не существует.\n";
getch();
return -1;
}
else if (a==b)
{
cout<<"Ошибка! Экземпляр не может быть записан сам в себя.\n";
getch();
return -2;
}
return 0;
}
stud stud::operator = (stud &o1) {
klass=NULL;
klass = o1.klass;
mass = o1.mass;
chast= o1.chast;
chisl = o1.chisl;
return o1;
}
int stud::operator == (stud &o1) {
if (chisl != o1.chisl) {cout << "Данные экземпляры класса не равны."; getch();}
else if (ceil(chast)!=ceil(o1.chast)) {cout << "Данные экземпляры класса не равны."; getch();}
else if (ceil(mass)!=ceil(o1.mass)) {cout << "Данные экземпляры класса не равны."; getch();}
else if (klass!=o1.klass) {cout << "Данные экземпляры класса не равны."; getch();}
else cout<<"Экземпляры класса равны."; getch();
return 0;
}
stud stud::operator + (stud &o1) {
stud tr;
int i,j;
klass=NULL;
tr.klass='+';
tr.mass=mass+o1.mass;
tr.chast=chast+o1.chast;
tr.chisl=chisl+o1.chisl;
return tr;
}
ostream & operator<<(ostream &stream, stud &o1) {
shapka();
stream<<"|"<<setw(10)<<o1.klass<<" | ";
stream<<setw(5)<<o1.mass<<"|";
stream<<setw(18)<<o1.chast<<" |";
stream<<setw(17)<<o1.chisl<<" |"; cout<<endl;
linebuild();
return stream;
}
istream & operator>>(istream &stream, stud &o1) {
cout<<"Введите Спектральный класс,Приблизительнаю масса,Часть %, Численность : \n";
stream>>o1.klass;
stream>>o1.mass;
stream>>o1.chast;
stream>>o1.chisl;
return stream;
}
void shapka(void)
{
cout<<"__________________________________________________________________________\n";
void linebuild(void) {
cout<<"\n|--------------------------------------------------------------------|\n";
}
void main(){
setlocale(LC_ALL, "Russian");
char klass;
float mass;
float chast;
int chisl;
stud ob[N];
int i,k;
int s1;
int q,q1;
stud obj[N]={stud('O',32,0.0002,5500),
stud('F',1.25,2.9,1200),
stud('M',0.2,73.2,2930)};
cout.precision(2);
for (i=0; i<N; i++) {
obj[i].showall();
cout<<"\n";
}
cin>>q;
cin>>q1;
if (isvalid(q, q1)!=0) exit(-1);
obj[q] = obj[q1];
for(i=0; i<N; i++) {
obj[i].showall();
cout<<"\n";
}
cout<<"\nПерегрузка оператора соответствия '=='.\n";
cout<<"Введите номера экземпляров класса, которые надо сравнить>\n";
cin>>q;
cin>>q1;
if (isvalid(q, q1)!=0) exit(-1);
obj[q] == obj[q1];
cout<<"\nПерегрузка оператора суммы '+'.\n";
cout<<"Введите номера экземпляров класса, которые надо сложить>\n";
cin>>q;
cin>>q1;
stud temp;
if (isvalid(q, q1)!=0) exit(-1);
temp=obj[q]+obj[q1];
cout<<"Спектральный класс,Приблизительнаю масса,Часть %, Численность : ";
temp.getall(klass,mass,chast,chisl);
cout<<"\nПерегрузка оператора потокового ввода '>>'.";
cout<<"\nВведите номер экземпляра класса: ";
cin>>q;
if ((q>N-1)||(q<0)) {cout<<"Ошибка! Экземпляра с таким индексом не существует."; getch(); exit(-1);}
cin>>obj[q];
cout<<"\nПерегрузка оператора потокового вывода '<<'.";
cout<<"\nВведите номер экземпляра класса: ";
cin>>q;
if ((q>N-1)||(q<0)) {cout<<"Ошибка! Экземпляра с таким индексом не существует."; getch(); exit(-1);}
cout<<obj[q];
getch();
}