字段变量声明为void error?

时间:2013-08-18 13:27:28

标签: c++ class void

以下是整个代码。

#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声明。我真的不知道这意味着什么?我在等待快速回复。而且我知道这篇文章编辑得不好,但如果你知道回复,我没有太多时间。

1 个答案:

答案 0 :(得分:4)

您的错误是由于名为Vraboten的全局命名空间中有两件事:

enum poz {Vraboten,Direktor,Shef};
//        ^^^^^^^^

class Vraboten{
//    ^^^^^^^^

您需要一种方法来消除这两个Vraboten的歧义。如果您使用的是C ++ 11,则可以将enum声明为enum class

enum class poz {Vraboten,Direktor,Shef};

如果您这样做,则必须将对此枚举值的引用更改为poz::Vrabotenpoz::Direktorpoz::Shef

如果您没有支持C ++ 11的编译器,可以通过将枚举声明包装在命名空间中来模拟它:

namespace poz {
    enum poz {Vraboten,Direktor,Shef};
}

如上所述,您必须使用enumpoz值添加前缀,但在声明此enum类型的变量时,您必须使用poz::poz myVar。< / p>