Easyelectronics.ru

Электроника для всех
Текущее время: 18 авг 2019, 14:15

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Видимость переменных класса...
СообщениеДобавлено: 29 июн 2019, 11:34 
Только пришел
Аватара пользователя

Зарегистрирован: 17 май 2014, 17:53
Сообщения: 20
Доброго дня!
Подскажите пожалуйста, почему я не могу обратиться к переменным класса из его же методов?
Среды разработки разные и под AVR Studio, IAR STM8....
Просмотрел кучу примеров и не нашел ни чего особенного для решения этого вопроса. Я только начинаю
осваивать С++
Спасибо!!

пример кода:
Код:
*** PCD8544.h ***
class PCD8544 {
  public:
      static void Set ( void );
  private:
      static uint8_t vCounter;
};

void PCD8544::Set ( void ) {
  vCounter = 55;
}

*** main.cpp ***
PCD8544 Display;

int main()
{
  Display.Set ( );
 
  while ( 1 ) {
   
  }
}

[/color]

Дает ошибку не определено PCD8544::vCounter


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видимость переменных класса...
СообщениеДобавлено: 29 июн 2019, 12:05 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3262
https://en.cppreference.com/w/cpp/language/static


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видимость переменных класса...
СообщениеДобавлено: 29 июн 2019, 14:22 
Только пришел
Аватара пользователя

Зарегистрирован: 17 май 2014, 17:53
Сообщения: 20
Спасибо!!
Да! И так пробовал..
Код:
*** PCD8544.h ***
class PCD8544 {
  public:
      static void Set ( void );
  private:
      static uint8_t vCounter;
};

void PCD8544::Set ( void ) {
  PCD8544::vCounter = 55;
}

*** main.cpp ***
PCD8544 Display;

int main()
{
  Display.Set ( );
 
  while ( 1 ) {
   
  }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видимость переменных класса...
СообщениеДобавлено: 29 июн 2019, 19:12 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2295
Чудак человек!
Ты его задекларировал, а не создал!
В .cpp файле пиши - по идее должен называться PCD8544.cpp

Код:
uint8_t PCD8544::vCounter;



Можешь даже проинициализировать


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видимость переменных класса...
СообщениеДобавлено: 29 июн 2019, 19:22 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2295
Теже решил плюсы изучать.

Моя первая прошивка на плюсах

http://www.youtube.com/watch?v=JYRZpaIoxI0


Чертовски удобно!
Хочу написать классы для работы с разной периферией.
Очень удобно будет использовать в различных проектах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видимость переменных класса...
СообщениеДобавлено: 29 июн 2019, 20:16 
Только пришел
Аватара пользователя

Зарегистрирован: 17 май 2014, 17:53
Сообщения: 20
В общем получается так:
Всегда создаю файлу ***.h, ***.cpp, просто в этот раз решил все вписать в один файл, AVR Studio так работало ( знаю, что
по фэншую, но когда что-то не получается, приходится многое пробовать и в результате на граблях учишься ).
Как обычно декларация в ***.h, а реализация ( методы в ***.cpp ), но раньше использовал глобальные переменные.
Все примеры которые я смотрел, а их было очень много ни когда не видел что бы переменные еще и создавать приходилось..
Спасибо за подсказку. Чисто интуитивно сделал запись, вроде не ругается...

Код:
*** PCD8544.cpp ***
#include "PCD8544.h"
#include "font5x7.h"

uint8_t PCD8544::Bufer [ 14 ] [ 6 ] [ 6 ];
uint8_t PCD8544::TextCursorX     = 0;
uint8_t PCD8544::TextCursorY     = 0;
uint16_t PCD8544::ETimeOut       = 0;
...
...
...

*** PCD8544.h ***
class PCD8544 {
    public:
      ...
      ...
      ...
    private:
      static uint8_t Bufer [ 14 ] [ 6 ] [ 6 ];
      static uint8_t TextCursorX;
      static uint8_t TextCursorY;
      static uint16_t ETimeOut;
      ...
      ...
      ...
};


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видимость переменных класса...
СообщениеДобавлено: 29 июн 2019, 20:49 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2295
Вы её объявили как СТАТИЧЕСКУЮ, что означает, что она будет сущесвовать даже когда ни одного экзкмпляра класса не создано.
И она будет ОБЩЕЙ ДЛЯ ВСЕХ ЭКЗЕМПЛЯРОВ КЛАССА.
Как без создания то?


А когда не статическая - её конструктор класса сосдаст, не нужна реализация.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видимость переменных класса...
СообщениеДобавлено: 29 июн 2019, 21:41 
Только пришел
Аватара пользователя

Зарегистрирован: 17 май 2014, 17:53
Сообщения: 20
Но зачем иметь класс без экземпляра?
Если переменную объявить как не статическую выдается сообщение:
a nonstatic member reference must be relative to a specific object C:\Project\STM\STM8\PCD8544\Src\PCD8544.c 77
И действительно переменные общие для всех экземпляров класса, да и логично ((


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Видимость переменных класса...
СообщениеДобавлено: 01 июл 2019, 09:51 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2295
Вы наверно удивитесь, но таки да - есть такие классы, для которых нельзя создать экземпляра, называются Виртуальными классами.
Зачем нужны - долго объяснять, почитайте соответствующую литературу.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB