2015-02-10 3 views
1

VERSION-1:Использование переменной перечисления в качестве члена данных класса выдает ошибку

// In this, the enum is declared globally 

#include <iostream> 
#include <string> 

using namespace std; 

enum Hand {RIGHT,LEFT}; 

class Batsman { 
    public: 
     Batsman(string s, Hand h) { 
      name = s; 
      hand = h; 
     } 
     void setName(string s) { 
      name = s; 
     } 
     void setHand(Hand h) { 
      hand = h; 
     } 
     string getName() { 
      return name; 
     } 
     Hand getHand() { 
      return hand; 
     }   
    private: 
     string name; 
     Hand hand; 
}; 

void main() { 
    Batsman B1("Ryder",LEFT); 
    Batsman B2("McCullum",RIGHT); 
} 

VERSION-2:

// In this, the enum is declared inside the class 

#include <iostream> 
#include <string> 

using namespace std; 

class Batsman { 
    public:  
     enum Hand {RIGHT,LEFT}; 
     Batsman(string s, Hand h) { 
      name = s; 
      hand = h; 
     } 
     void setName(string s) { 
      name = s; 
     } 
     void setHand(Hand h) { 
      hand = h; 
     } 
     string getName() { 
      return name; 
     } 
     Hand getHand() { 
      return hand; 
     }   
    private: 
     string name; 
     Hand hand; 
}; 

void main() { 
    Batsman B1("Ryder",LEFT); 
    Batsman B2("McCullum",RIGHT); 
} 

Ошибки:

D:\\Work Space\\C++\\C.cpp: In function `int main(...)': 
D:\\Work Space\\C++\\C.cpp:33: `LEFT' undeclared (first use this function) 
D:\\Work Space\\C++\\C.cpp:33: (Each undeclared identifier is reported only once 
D:\\Work Space\\C++\\C.cpp:33: for each function it appears in.) 
D:\\Work Space\\C++\\C.cpp:34: `RIGHT' undeclared (first use this function) 

Просьба сообщить мне исправления в обоих случаях, чтобы я мог разобраться в концепции раз и навсегда. Будем очень благодарны.

+2

"Errors"? Убедитесь, что вы указали точные сообщения об ошибках. – crashmstr

+0

Добавьте ошибки, которые производятся ... мы не являемся компиляторами. – jepio

+2

Это 'int main'. – chris

ответ

6

Для вашего 1-го случая код compiles just fine for me (после установления типа возврата main()). Я не знаю, какие ошибок вы беспокоитесь.


Для вашего 2-го случая, перечисление объявляется в области видимости класса

class Batsman { 
public:  
    enum Hand {RIGHT,LEFT}; 
    // ... 
}; 

, так что вы должны будете предоставить квалификатор области в main():

int main() { 
    Batsman B1("Ryder",Batsman::LEFT); 
        // ^^^^^^^^^ 
    Batsman B2("McCullum",Batsman::RIGHT); 
         // ^^^^^^^^^ 
} 

Также обратите внимание, что вы всегда должны иметь int в качестве возвращаемого типа main().

+0

Большое вам спасибо. Вы сделали мой день. :) – abcde

+0

Что ???? Я думал, что тип возврата был произвольным. Любое конкретное использование возврата int вместо void? – abcde

+0

@AnonymousAndy Вот как основной сообщает об успешной работе или ошибке в системе. – juanchopanza

Смежные вопросы