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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
SkyN
1 / 1 / 0
Регистрация: 08.02.2010
Сообщений: 16
#1

не линкуется класс с static членами - C++

09.03.2010, 13:17. Просмотров 1145. Ответов 7
Метки нет (Все метки)

не линкуется класс с static членами
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A
{
public:
    static int get(){return aaa;}
    A(){};
    ~A(){};
private:
    static int aaa;
};
 
int main(int argc, const char *argv[])
{
    int a = A::get();
    return 0;
}
В чем проблема?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2010, 13:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос не линкуется класс с static членами (C++):

Класс со статическими членами - C++
Создать класс Alfa таким образом , чтоб при создании первого и уничтожении последнего объекта этого типа на экран выводились...

Создать класс время с данными-членами часы, минуты, секунды - C++
отучилась на программиста уже год, но пока что как-то тяжко с заданиями, тем более с классами, не успели пройти их... помогите пожалуйста...

Реализовать произвольный пользовательский класс с функциями-членами Put и Show - C++
Создать несколько обьектов. Написать функции: 1) для ввода данных по обьекту(как Put) 2) для распечатки информации об обьекте (как...

Определить класс со следующими данными-членами : фамилия пассажира, номер рейса, стоимость билета, вес багажа - C++
Определить класс со следующими данными-членами : фамилия пассажира, номер рейса, стоимость билета, вес багажа. Вводить данные с клавиатуры...

Не линкуется проект с Use Unicode Character Set - C++
Такая проблема: 1) Есть проект (dll) в котором объявлен и описан метод класса CMyClass: SetStr(CString str); как вариант ...

Реализовать класс "Квадрат" с данными-членами "центр квадрата" и "сторона квадрата" - C++
Объявить класс по приведенному ниже заданию в соответствии с номером варианта и определить для него конструктор по умолчанию,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
09.03.2010, 13:40 #2
Статические функции ничего не знают об указателе this...
0
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
09.03.2010, 13:43 #3
Нужно явно инициализировать aaa добавь строку после класса и перед меином
int A::aaa = 0; // ну или любое другое значение...
1
SkyN
1 / 1 / 0
Регистрация: 08.02.2010
Сообщений: 16
09.03.2010, 13:48  [ТС] #4
а где у меня указатель this? aaa тоже объявлена как статическая!

Добавлено через 4 минуты
Amarted, спасибо! сработало.
0
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
09.03.2010, 13:49 #5
*this это указатель кторый есть во всех объектах(его не видно но он есть) на сам объект, то есть на самого себя.
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
09.03.2010, 13:58 #6
а где у меня указатель this? aaa тоже объявлена как статическая!
Да, это я невнимательно посмотрел код...
0
SkyN
1 / 1 / 0
Регистрация: 08.02.2010
Сообщений: 16
10.03.2010, 10:25  [ТС] #7
если я не буду использовать класс A, запись int A::aaa = 0; увеличит программу?
Т.е. будут ли инициализироваться статические члены класса, если сам класс нигде не используется?
0
Evg
Эксперт CАвтор FAQ
17810 / 6016 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
10.03.2010, 11:31 #8
Цитата Сообщение от SkyN Посмотреть сообщение
если я не буду использовать класс A, запись int A::aaa = 0; увеличит программу?
Т.е. будут ли инициализироваться статические члены класса, если сам класс нигде не используется?
Да. НЕстатические поля - это аналог поля структуры (т.е. относится к типу) - если ты структуры не используешь, то никакой памяти не требуется. А вот статические поля - это уже аналог переменных (хотя сточки зрения синтаксиса выглядит как поле структуры), а потому независимо от использования класса переменная будет создана. При этом описание статического поля внутри класса это есть по сути аналог объявления переменной (т.е. описание extern переменной). Поэтому твой изначальный код ломался на линковке
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2010, 11:31
Привет! Вот еще темы с ответами:

Деструктор шаблона описанный в отдельном файле не линкуется. Почему? - C++
Есть такой код: файл "a.h" #include <iostream> template < typename T> class A { public: A() { a=0; std::cout <<"c A"<<...

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template <class T> class matrix { friend class diagonal; ...

Ошибка с статическими членами класса - C++
Доброго времени суток, форумчане! Недавно пришлось вернуться с С# на С++ и я тут же заметил что я все забыл( Итак по сути: Есть...

Объявление класса с открытыми членами. - C++
Всем привет! Уважаемые, не проясните ситуацию? В чем здесь ошибка? :)


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.03.2010, 11:31
Ответ Создать тему
Опции темы

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