|
Регистрация | Файлы | Правила | Альбомы | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
Языки программирования Изучаем С++, Sql, php, Lua, Python |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
22.05.2010, 21:22 | #1 |
Новичок
Регистрация: 07.03.2010
Сообщений: 4
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
|
класы в C++
Все привет, есть проблема
Есть клас в одном файле class X: public Y {... public: ... bool wartime() const {return timing;}; ... protected: bool timing; ... }; в другом файле надо такую проверку if (wartime()==true) .... тольков вот if (&X::wartime()==true) результата не дает error C2352: X::wartime: недопустимый вызов нестатической функции-члена че не так делаю О.о |
22.05.2010, 21:44 | #2 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Сначала надо создать экземпляр класса или же использовать статичяеский метод в классе как-то так
: Код:
class X: public Y {... public: ... static bool wartime() const {return timing;}; ... protected: bool timing; ... }; Код:
X _x = X(); if (_x::wartime()==true) Последний раз редактировалось Konctantin; 22.05.2010 в 21:47. |
Пользователь сказал cпасибо: | Chaosua (22.05.2010) |
22.05.2010, 22:29 | #3 | |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Цитата:
|
|
Пользователь сказал cпасибо: | Chaosua (22.05.2010) |
14.01.2011, 19:00 | #4 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Ерунду какую-то понаписали...
либо при объявлении экземпляра класса Х _x, использовать оператор "." Код:
_x.wartime() Код:
X _x = X(); Код:
X* _x = new X(); И еще, на кой предмет в объявлении X _x писать = X() такое объявление пишется просто так X _x;. У конструктора все равно нет параметров. А если бы были параметры, то так X _x(параметр1, параметр2, ...); Подытожив все сказанное, правильный вариант выглядит так: Код:
class X: public Y {... public: ... bool wartime() {return timing;}; ... protected: bool timing; ... }; X _x; if (_x.wartime()) { ... } А учитывая то как был объявлен класс, функция wartime() возвращает именно переменную член, следовательно никаких статиков. Последний раз редактировалось Йоха; 14.01.2011 в 19:03. |
11.04.2011, 11:17 | #5 | ||
Kobold Dev
Регистрация: 29.07.2010
Сообщений: 21
Сказал(а) спасибо: 5
Поблагодарили 2 раз(а) в 2 сообщениях
|
Цитата:
Цитата:
Код:
// x_class.h class X: public Y { public: // ... static bool wartime() { return timing; } protected: static bool timing; }; // z_class.h #include "x_class.h" class Z { public: static void simple_method() { if ( X::wartime() ) { // ... } } // ... };
__________________
World Database Development Group Последний раз редактировалось Blacksmither; 11.04.2011 в 11:54. |
||
22.05.2010, 21:48 | #6 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
if (wartime()) можно писать внутри методов класса X и любого его потомка.
== true не нужно. |
22.05.2010, 23:20 | #7 |
Новичок
Регистрация: 07.03.2010
Сообщений: 4
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
|
а все таки прошел вариант
Код:
if (_x.wartime()==true) хотя вроде оно никогда не выдает true спс буду колдовать дальше Последний раз редактировалось Chaosua; 23.05.2010 в 01:03. |
11.04.2011, 12:57 | #9 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Во-первых тема совершенно не двусмысленно называется "классы в с++", поэтому с# тут совсем не причем. Зачем путать синтаксис двух разных языков ?
Не знаю что означает ключевое слово static в с#, а в плюсах объявление переменной члена или функции члена как статик, делает ее глобальной переменной/функцией в пространстве имен класса. А объявление переменной вне класса делает ее просто глобальной, для фугкции не члена объявление static бессмысленно. И подобное объявление класса (как в предыдущем посте) является бредом чистой воды. Эквивалент для класса X можно записать так: Код:
namespace X { bool timing; bool wartime() { return timing; } }; P.S. любителям с# советую в программах на с++ не лепить кругом static, в плюсах это неактуально и чревато ошибками. Вообще использование конструкций языка без понимания того что они делают чревато багами которые потом ни за что на свете не найти Последний раз редактировалось Йоха; 11.04.2011 в 13:10. |
11.04.2011, 13:50 | #10 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Цитата:
|
|
11.04.2011, 15:04 | #11 | |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Цитата:
Вообще в C++ у static 3 совершенно разных значения в 1) описании класса 2) вне класса и функции 3) внутри кода функции.
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
|
11.04.2011, 15:47 | #12 | |||||
Kobold Dev
Регистрация: 29.07.2010
Сообщений: 21
Сказал(а) спасибо: 5
Поблагодарили 2 раз(а) в 2 сообщениях
|
Цитата:
Цитата:
Структурой. Через Singleton. ... Это все тоже бред чистой воды? В каждой конкретной ситуации - проще (и зачастую, необходимо) делать так, а не иначе. Или Вы все пишите по шаблону? Скажем, помимо одного "static bool wartime()" там есть еще "void dynamic_func()" - но wartime вызывается часто/необходимо иметь одну и ту-же величину не прибегая к паттернам Одиночки и прочему. Да мало-ли случаев и ситуаций... Цитата:
Цитата:
Все нужно в меру Цитата:
__________________
World Database Development Group |
|||||
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|