Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
5 / 3 / 1
Регистрация: 06.11.2014
Сообщений: 33
1

Static члены классов

30.01.2016, 23:05. Показов 1146. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доббрый день.

Хочу решить следующую задачу: посчитать количество сравнений, которое делает qsort. Для этого, как мне видится можно написать класс-компаратор, который подсчитывает сколько раз его вызывают и скормить его std::sort.
Пишу код:
C++
1
2
3
4
5
6
7
8
template<typename T>
struct CmpCount {
    static int Count = 0;
    bool operator () (const T& a, const T& b) {
        ++Count;
        return a < b;
    }
};
На что мне компилятор говорит, что мол нельзя делать статические неконстантные члены класса. Как быть?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2016, 23:05
Ответы с готовыми решениями:

Static члены класса
Здравствуйте. есть класс, например point { public: float x; float y;

Crash из-за static-членов классов
Программа зависает или крашится из-за статических членов классов. Я пробовал убирать их -...

Наследование классов и обращение к Private/Static
Здравствуйте! У меня возникла проблема при попытке унаследовать параметры класса... У меня есть 2...

Указатель на объекты и члены классов
class AA { public: void Start( ); }; class BB { public: void Start( );

7
18901 / 9859 / 2410
Регистрация: 30.01.2014
Сообщений: 17,302
30.01.2016, 23:11 2
Лучший ответ Сообщение было отмечено КамазПодарков как решение

Решение

Цитата Сообщение от КамазПодарков Посмотреть сообщение
что мол нельзя делать статические неконстантные члены класса.
Нельзя их так инициализировать. Делать можно:

C++
1
2
3
4
5
6
7
8
9
10
11
template<typename T>
struct CmpCount {
    static int Count;
    bool operator () (const T& a, const T& b) {
        ++Count;
        return a < b;
    }
};
 
template<typename T>
int CmpCount<T>::Count = 0;
1
5 / 3 / 1
Регистрация: 06.11.2014
Сообщений: 33
30.01.2016, 23:22  [ТС] 3
О, работает! То есть их просто после класса определять надо?
0
18901 / 9859 / 2410
Регистрация: 30.01.2014
Сообщений: 17,302
30.01.2016, 23:23 4
Цитата Сообщение от КамазПодарков Посмотреть сообщение
То есть их просто после класса определять надо?
Да
1
43 / 43 / 20
Регистрация: 08.12.2010
Сообщений: 342
30.01.2016, 23:26 5
КамазПодарков, не после classa, а например в конструкторе данного класса.
0
18901 / 9859 / 2410
Регистрация: 30.01.2014
Сообщений: 17,302
30.01.2016, 23:27 6
В случае нешаблонного класса, такие определения статических переменных должны быть только в какой-то одной единице трансляции, иначе будет multiple definition вследствие нарушения ODR. Это так, на будущее.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
30.01.2016, 23:28 7
Цитата Сообщение от Ника)) Посмотреть сообщение
не после classa, а например в конструкторе данного класса.
штоа?
2
5 / 3 / 1
Регистрация: 06.11.2014
Сообщений: 33
30.01.2016, 23:31  [ТС] 8
Ну это-то ясно
0
30.01.2016, 23:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2016, 23:31
Помогаю со студенческими работами здесь

Описать члены-данных классов пользователя
Задача: Описать члены-данных классов пользователя. кадры имя-char * номер цеха-int разряд-int

Наследование static атрибута(хранение количества объектов наследуемых классов)
Есть абстрактный класс base, от него наследуются 3 класса child1 child2 child3. Создается множество...

Необходим общий private static-член для всех классов, сгенерированных по шаблону
Здравствуйте! Мне необходим общий private static-член для всех классов, сгенерированных по...

Чем различаются shared и static члены класса?
ф


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru