以下是整个代码。
#include <iostream>
#include <cstring>
using namespace std;
enum poz {Vraboten,Direktor,Shef};
class Vraboten{
private:
char name[100];
int plata;
poz pozicija;
public:
Vraboten();
Vraboten(char *n,int p, poz pz)
{
strcpy(name,n);
plata=p;
pozicija=pz;
}
~Vraboten();
void setName (const char *n)
{strcpy(name,n);}
void setPlata (int p)
{plata=p;}
void setPozicija(poz pz)
{pozicija=pz;}
const char* getName(){return name;}
const int getPlata() {return plata;}
void getPozicija (){
switch(pozicija){
case 0:cout<<"Vraboten";
case 1:cout<<"Direktor";
case 2:cout<<"Shef";
default:cout<<"Invalid entery";
}}
};
void Sort(Vraboten emp[],int br);
int main()
{
Vraboten vrab[100];
char ime[100];
int payment,pozition;
int broj,i;
cout<<"Vnesi broj na vraboteni";
cin>>broj;
for(i=0;i<broj;i++)
{
cout<<"Vnesi ime na vraboten broj "<<i<<" ";
cin>>ime;
cout<<"Vnesi plata na vraboten broj "<<i<<" ";
cin>>paymen;
cout<<"Vnesi pozicija na vraboten broj "<<i<<" 0-Vraboten, 1-Direktro, 2-Shef";
cin<<pozition;
vrab[i].setName(ime);
vrab[i].setPlata(paymen);
vrab[i].setPozicija(poz(pozition));
}
Sort(vrab,broj);
for (int i = 0; i < n; i ++) {
cout << i + 1 << ". " << vrab [i]. getName () << "\t"
<< vrab [i]. getPlata () << "\t"
<< vrab [i]. getPozicija () << endl ;
}
}
void Sort(Vraboten emp[],int br)
{
int i,j;
Vraboten temp;
for(i=0;i<br;i++)
for(j=i;j<br;i++)
{
if(emp[i].getPlata()<emp[j].getPlata())
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
它给了我一个错误:字段'Sort'的变量声明为void,第42行是在main之前的Sort声明。我真的不知道这意味着什么?我在等待快速回复。而且我知道这篇文章编辑得不好,但如果你知道回复,我没有太多时间。
答案 0 :(得分:4)
您的错误是由于名为Vraboten
的全局命名空间中有两件事:
enum poz {Vraboten,Direktor,Shef};
// ^^^^^^^^
和
class Vraboten{
// ^^^^^^^^
您需要一种方法来消除这两个Vraboten
的歧义。如果您使用的是C ++ 11,则可以将enum
声明为enum class
:
enum class poz {Vraboten,Direktor,Shef};
如果您这样做,则必须将对此枚举值的引用更改为poz::Vraboten
,poz::Direktor
和poz::Shef
。
如果您没有支持C ++ 11的编译器,可以通过将枚举声明包装在命名空间中来模拟它:
namespace poz {
enum poz {Vraboten,Direktor,Shef};
}
如上所述,您必须使用enum
为poz
值添加前缀,但在声明此enum
类型的变量时,您必须使用poz::poz myVar
。< / p>