2015-09-21 3 views
-1

Я написал этот класс (ниже), но мой компилятор показывает ошибки. Кто-то знает, что здесь не так? Спасибо за вашу помощь и извините за мой английский, я только начал учиться.Как улучшить этот класс на C++?

Я написал этот класс для преобразования класса: с буквами на процентах и ​​наоборот. Но что-то не так, не могли бы вы решить мою проблему?

О ОШИБКИ:

10:89: error: 'constexpr' needed for in-class initialization of static data member 'char Grade::grade_map [15]' of non-integral type [-fpermissive] 
11:55: error: ISO C++ forbids in-class initialization of non-const static member 'Grade::letter' 
11:55: error: scalar object 'Grade::letter' requires one element in initializer 
14:12: error: expected ':' before 'Grade' In constructor 'Grade::Grade()': 
17:30: error: array must be initialized with a brace-enclosed initializer 
16:19: warning: unused variable 'grade_map' [-Wunused-variable] 
17:19: warning: unused variable 'letter' [-Wunused-variable] 
18:11: warning: unused variable 'percent' [-Wunused-variable] In function 'int main()': 
48:125: error: no matching function for call to 'Grade::printGrade(Grade&)' 
48:125: note: candidate is: 
33:6: note: void Grade::printGrade(Grade*) 
33:6: note: no known conversion for argument 1 from 'Grade' to 'Grade*' 
45:8: warning: unused variable 'geade_map' [-Wunused-variable] 
46:8: warning: unused variable 'letter' [-Wunused-variable] 

Это мой класс в C++:

#include <iostream> 
#include <cstdio> 
using namespace std; 

    class Grade // my class 

    { 
     public: 

    static char grade_map [15]; 
    static char letter; 
    int percent; 

    public Grade() 
      {       
    static char grade_map [15]; 
     static char letter[20]='A'; 
     int percent = 1; 
     } 

     void setGradeByPercent(Grade * grade, int percent) 
     { 
      grade->percent = percent; 
      grade->letter = grade_map [percent/10]; 
     } 

     void setGradeByLetter(Grade * grade, char letter) 
     { 
     grade->letter = letter; 
     grade->percent = 100 - (letter - 'A') * 10 - 5; 
     } 

     void printGrade(Grade * grade) 
     { 
      printf("Grade: %d: %c\n", grade->percent, grade->letter); 
     } 

     }; 

      **int main()** 

      { 
       Grade g; 
       int percent; 
      char grade_map[15]; 
       char letter[20]; 

      cout << "Enter two grades separated by a space. Use       percentage  for   first and  letter for the second: " << g.printGrade (g) << endl; 

     scanf("%d", &percent); 
     scanf("\n");  

     g.setGradeByPercent(&g, percent); 
     g.printGrade(&g); 
      g.setGradeByLetter(&g, getchar()); 
      g.printGrade(&g); 

        return 0; 
       } 
+2

Если бы вы могли написать немного более описательное название, это было бы потрясающе. Кроме того, ** очевидно, что точные ошибки компилятора важны **. Скопируйте и вставьте их в свой вопрос. Вы можете отредактировать свой вопрос, нажав кнопку «Изменить» под ним. –

+1

Какие ошибки? Пожалуйста, опубликуйте [mcve] и отформатируйте его правильно. –

+0

Hm, @BaummitAugen, я не могу доверять вашему прозвищу: из вашего существования следует, что глаза не могут быть круговыми. –

ответ

0

Ваша первая проблема с конструктором, где в первую очередь необходимо двоеточие после public, а затем использовать совершенно неправильно способ инициализации членов класса.

Если упростить это, по крайней мере, он будет компилировать:

public: 
    Grade() 
    {       
     letter='A'; 
     percent = 1; 
    } 

Вторая проблема заключается в том, что у вас есть g.printGrade (g) в качестве аргумента cout. Однако функция возвращает void, поэтому ее нельзя распечатать.

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