Статический член в программировании на C ++ - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь создать класс C ++, который может работать как держатель для моего проекта, поэтому я реализовал статические члены и функции моего класса, но я не знаю, почему компилятор может распознавать _nTriggerMode внутри setTriggerMode.

Вот мой заголовочный файл:

#pragma once
class GrabberOptions
{
private:
    static int _nTriggerMode;
    static int _nExposureInMicroSec;
    static double _dFramesPerSecond;
    static int _nExsysncOn;

public:
    GrabberOptions(void);
    ~GrabberOptions(void);
    static void setTriggerMode(int triggerMode);
    static void setExposureInMicroSec(int exposureMicroSec);
    static void setFramePerSecond(double framePerSec);
    static void setExsysncOn(int exsysncOn);

    static int getTriggerMode();
    static int getExposureInMicroSec();
    static double getFramePerSecond();
    static int getExsysncOn();
};

А вот и файл .ccp:

#include "StdAfx.h"
#include "GrabberOptions.h"
 int GrabberOptions::_nTriggerMode;

int GrabberOptions :: _ nExposureInMicroSec;double GrabberOptions :: _ dFramesPerSecond;int GrabberOptions :: _ nExsysncOn;GrabberOptions :: GrabberOptions (void) {_nTriggerMode = GRABBER_CONTROLLED;_nExposureInMicroSec = 20;_dFramesPerSecond = 1000;_nExsysncOn = 1;}

GrabberOptions::~GrabberOptions(void)
{
}

void setTriggerMode (int triggerMode) {_nTriggerMode = triggerMode;}

Пожалуйста, дайте мне некоторое представление о том, как использовать статические.

Ответы [ 3 ]

4 голосов
/ 03 апреля 2012

static переменные-члены класса должны быть определены вне определения класса:

// .h file
class GrabberOptions
{
private:
    static double _dFramesPerSecond; // declaration

// .cpp file
double GrabberOptions::_dFramesPerSecond = 1000; // definition
4 голосов
/ 03 апреля 2012

Вам нужно инициализировать статические данные вне определения класса, в одной единице перевода (обычно это ваш соответствующий файл реализации):

#include "StdAfx.h"
#include "GrabberOptions.h"

double GrabberOptions::_dFramesPerSecond; //initializes to 0
//double GrabberOptions::_dFramesPerSecond = 1337; //if you want a different value

GrabberOptions::GrabberOptions(void)
{
    //  _nTriggerMode       = GRABBER_CONTROLLED;
    //    _nExposureInMicroSec  = 20;
        _dFramesPerSecond   = 1000;
    //  _nExsysncOn         = 1;
}

GrabberOptions::~GrabberOptions(void)
{
}
1 голос
/ 03 апреля 2012

Переменные-члены static класса являются общими для всех экземпляров класса. Они иногда полезны, но это, вероятно, не пример. Статические функции-члены могут получать доступ только к статическим переменным-членам.

Ваш дизайн класса, показанный закомментированным кодом, не содержит данных для каждого экземпляра; все статично. По сути, это никогда не было хорошим дизайном в C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...