Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
stal_in
1 / 1 / 6
Регистрация: 22.03.2011
Сообщений: 56
#1

Ошибка компиляции "forbids in-class initialization of non-const static member" - C++

22.12.2014, 07:56. Просмотров 1084. Ответов 4
Метки нет (Все метки)

Доброго времени суток! Прошу помощи, так как сам понять в чем проблема не могу.

Имею вот такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "iostream"
#include "cassert"
using namespace std;
const int size = 50;
class MyStack
{
public: int top = 0, a[size];
        void Push(int b)
        {
            assert(top < size);
            a[++top] = b;
        }
        void Pop()
        {
            assert(top > 0);
            top--;
        }
        int Top()
        {
            assert(top > 0);
            return a[top];
        }
};
int main()
{
    setlocale(LC_ALL, "Russian");
    MyStack x, y;
    int n = 1; while (n != 0)
    {
        cout << "\nВведите число:\n";
        cout << "0 - выход\n";
        cin >> n;
        if (n == 0) break;
        if (n <= 1 && n != 0) cout << "Число должно быть больше 1\n";
        else
        {
            int d = 2;
            while (n != 1)
            {
                if (n%d == 0)
                {
                    x.Push(d);
                    n /= d;
                }
                else d++;
            }
            if (x.top == 1) { cout << "Ваше число простое\n"; x.Pop(); }
            else
            {
                cout << "Простые множители:\n";
                while (x.top != 0)
                {
                    cout << x.Top() << "  ";  y.Push(x.Top()); x.Pop();
                }
                cout << '\n';
                while (y.top != 0)
                {
                    cout << y.Top() << "  "; y.Pop();
                }
            }
        }
    }
    return 0;
}

И при компиляции получаю вот такую ошибку:
Ошибка компиляции "forbids in-class initialization of non-const static member"
В чем причина?

p.s.
Код не мой, во всем кроме 7й строчки разобраться удалось, не подскажите, что это за странная инициализация?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2014, 07:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка компиляции "forbids in-class initialization of non-const static member" (C++):

Ошибка "ANSI C++ forbids implicit conversion from void* in initialization"
код списка с последовательным хранением рабочий (взят из лабы).но там и cnt и...

При компиляции ошибка: C2228: left of ".real",".imag" must have struct/class/union
Помогите, пожалуйста! Компилирую в VS2010... Ошибка: C2228: left of...

Ошибки: "invalid use of non-static data member", "error: from this location"
Здравствуйте. Помогите пожалуйста понять в чём я не прав. Почему компилятор не...

Ошибка при компиляции "Cannot convert `std::string' to `const char*"
Подскажите пожалуйста.Компилятор указывает на 13-ой позиции на ошибку типа:...

Ошибка "non-static data member initializers only available with -std=c++11 or -std=gnu++11"
Компилирую вот этот код: #include &lt;algorithm&gt; #include &lt;iostream&gt; #include...

Ошибка при компиляции "error C2088: <<: недопустимо для class"
Доброго времени суток :) у меня при компиляции возникает ошибка...

4
behollder
47 / 28 / 12
Регистрация: 23.01.2013
Сообщений: 125
Завершенные тесты: 1
22.12.2014, 08:01 #2
в конструкторе нужно присваивать или c++11 включить
C++
1
2
3
int top = 0
...
MyStack() : top(0){}
1
stal_in
1 / 1 / 6
Регистрация: 22.03.2011
Сообщений: 56
24.12.2014, 01:56  [ТС] #3
Угу, понял, а по поводу самого кода не подскажите? Именно 7 строка, не пойму, что это за инициализация такая.
C++
1
int top = 0, a[size];
0
Kastaneda
Jesus loves me
Эксперт С++
4760 / 2963 / 341
Регистрация: 12.12.2009
Сообщений: 7,524
Записей в блоге: 2
Завершенные тесты: 1
24.12.2014, 11:43 #4
вот это
C++
1
int top = 0, a[size];
тоже самое, что
C++
1
2
int  top = 0;
int a[size];
0
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,201
Завершенные тесты: 1
24.12.2014, 11:58 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class MyStack
{
private:
 int top , a[size];
public:
    MyStack()
   {
        top=-1;
       for(int i=0;i<size;i++)
              a[i]=0;
   }
   bool Push(int b)
   {
        if(top < size-1)
        {
            a[++top] = b;
            return true;
        }
        return false;
   }
    int Pop()
   {
       if(top >= 0)
            return a[top--];
       return a[0];
   }
    int Top()
    {
            if(top >= 0)
               return a[top];
            return a[0];
    }
};
0
24.12.2014, 11:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2014, 11:58
Привет! Вот еще темы с решениями:

Ошибка компиляции "must have class/struct/union"
Здравствуйте. Возникают ошибки: Error 4 error C2228: left of...

Ошибка при сборке многофайлового проекта: "невозможно преобразовать "int" в "const golf"
Сделал многофайловую программу программу, вот она: //golf.h #include...

Где ошибка невозможно преобразовать указатель "this" из "const pers" в "pers &" при выводе объектов через cout
Добрый день! Переписал код из книг Лафоре, создание мультимножества из...

"Member function may not be redeclared outside its class"
подчеркивает красной линией конструктор копирования с таким сообщением в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru