Форум программистов, компьютерный форум CyberForum.ru

Ошибка компиляции - C++

Восстановить пароль Регистрация
 
prohp
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 8
27.02.2013, 23:50     Ошибка компиляции #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
class X
{
public:
    static int a;
};
 
void main()
{
    X::a=3;
}

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
class X
{
public:
    static int a;
    X()
    {
        a=5;
    }
};
void main()
{
        X a;
    std::cout<<a.a;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
class X
{
public:
    static int a;
    static int stat()
    {
        a=5;
        return a;
    }
};
void main()
{
   std::cout<<X::stat();
}
Хочу присвоить значение статической переменной класса a. Пробовал разными способами, ничего не получается.
Везде одни и те же ошибки:

Ошибка 1 error LNK2001: неразрешенный внешний символ ""public: static int X::a" (?a@X@@2HA)" C:\Users\Джамал\documents\visual studio 2012\Projects\unit1\unit1\unit1.obj unit1

Ошибка 2 error LNK1120: неразрешенных внешних элементов: 1 C:\Users\Джамал\documents\visual studio 2012\Projects\unit1\Debug\unit1.exe 1 1 unit1

Компилятор визуал студио экспресс 2012 для десктопа. Ос windows 7 prof.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2013, 23:50     Ошибка компиляции
Посмотрите здесь:

ошибка компиляции C++
ошибка компиляции C++
Ошибка при компиляции. Где ошибка? (Работа с классом) C++
ошибка компиляции C++
Ошибка компиляции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11819 / 6798 / 769
Регистрация: 27.09.2012
Сообщений: 16,871
Записей в блоге: 2
Завершенные тесты: 1
28.02.2013, 00:02     Ошибка компиляции #2
Цитата Сообщение от prohp Посмотреть сообщение
Хочу присвоить значение статической переменной класса a.
в .cpp
C++
1
int A::a=0;
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
28.02.2013, 00:05     Ошибка компиляции #3
Нужно объявить статическую переменную в глобальной зоне (области данных):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
  
 class X
 {
     public:
         static int a;
 };
  
 int X::a;
 
 int main()
 {   
     X::a = 5;
 }
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2013, 00:06     Ошибка компиляции #4
Цитата Сообщение от prohp Посмотреть сообщение
Хочу присвоить значение статической переменной класса a.
Присваивайте вне объявления класса.
prohp
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 8
28.02.2013, 00:40  [ТС]     Ошибка компиляции #5
Когда я пишу вне функции main() int X::a=5, то все нормально. А вот когда я пишу прямо в main
C++
1
int X::a=5
, то компилятор жалуется на область видимости, но ведь я ему указываю через :: куда смотреть. Почему такое происходит?
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
28.02.2013, 00:48     Ошибка компиляции #6
Потому что переменная определена с ключевым словом static хранит своё значение, там-же где и глобальные объекты: в области данных, поэтому там их и нужно объявлять. Такова особенность синтаксиса языка, и никуда не денешься

Добавлено через 2 минуты
Во всяком случаи это справедливо к статическим объектам класса...
prohp
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 8
28.02.2013, 00:55  [ТС]     Ошибка компиляции #7
во во, только к статическим объектам. логики просто не вижу в том, чтобы объявлять еще раз глобальную переменную, которая уже есть в классе. Например, если бы эта переменная не была бы статической, то я мог бы спокойно манипулировать с ней через объект и мне не нужно было бы объявлять эту переменную глобально перед main.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2013, 01:10     Ошибка компиляции #8
Цитата Сообщение от prohp Посмотреть сообщение
Например, если бы эта переменная не была бы статической, то я мог бы спокойно манипулировать с ней через объект и мне не нужно было бы объявлять эту переменную глобально перед main.
И у каждого объекта была бы своя, а статическая переменная класса у всех объектов класса одна. Для чего и объявляется так (содержится не в объекте класса, а отдельно).
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.02.2013, 01:13     Ошибка компиляции #9
Цитата Сообщение от prohp Посмотреть сообщение
во во, только к статическим объектам. логики просто не вижу в том, чтобы объявлять еще раз глобальную переменную, которая уже есть в классе. Например, если бы эта переменная не была бы статической, то я мог бы спокойно манипулировать с ней через объект и мне не нужно было бы объявлять эту переменную глобально перед main.
Что значит нет логики? Логика следующая. Эта переменная и есть глобальная. Это не элемент(поле) класса. Это "глобальная" переменная, отличающаяся от других глобальных лишь тем, что привязана к классу Х. И обращаться к ней надо X::a. А расположена она глобально.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2013, 12:00     Ошибка компиляции
Еще ссылки по теме:

Ошибка компиляции C++
Ошибка компиляции C++
С++ Ошибка компиляции C++

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

Или воспользуйтесь поиском по форуму:
prohp
0 / 0 / 0
Регистрация: 27.02.2013
Сообщений: 8
28.02.2013, 12:00  [ТС]     Ошибка компиляции #10
спасибо всем за ответы
Yandex
Объявления
28.02.2013, 12:00     Ошибка компиляции
Ответ Создать тему
Опции темы

Текущее время: 14:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru