C++에서는 전체 클래스를 공유하기 위해 런타임에 프로그래밍 방식으로 초기화해야하는 복소수 배열이 단 한 번만 있습니다. 그것들은 정적이거나 일정 할 수 있습니다. 어떻게 그들을 초기화 할 수 있습니까? 나는 현존하는 parrallel 프로세서의 엄청난 인기와 함께 정적을 사용하지 않았다. 그래서 플래그를 한 번 실행하도록 설정해야합니까? 아니면 함수 (ok) 또는 클래스 (ok)에 대한 변수로 초기화 할 정적 정적 마술이 있습니까? 내가 NUMTRACES을 반복없이 검색 할 수 있도록 이미 sumOfWeights로 나누어 각각 이중으로 weightAtI에게 조회를하고 싶습니다 위의 코드에서 클래스 변수 배열을 프로그래밍 방식으로 초기화해야합니다. 어떻게해야합니까?
double sumOfWeights = 0.0;
double fracObs = 0.0;
for (int i = 0; i < NUMTRACES; i++) {
double weightAtI = SQUARED(1 - SQUARED(MAXTRACEWRTMIDTRACE * (MIDTRACE - i)
/double(MIDTRACE)));
sumOfWeights += weightAtI;
fracObs += obsArray[i] * weightAtI;
}
return fracObs/sumOfWeights;
.
_ 편집 _ 그것은 그 생성자는 그냥 흥정에 내 정적, const를 초기화 그렘린를 해결하기 위해 희망 :) 위한거야, 괜찮아. 감사합니다 세스
_ 편집 _ 는 그래도 원하는 확실히 효과가 확실하지. 멤버가 정적 인 경우에도 생성자는 각 인스턴스에서 실행됩니다. 제 맞쳐은 볼 ...
는 _ 편집 _ 내가 가장 효율적인 솔루션은 생성자에서, 정적 플래그로 초기화 루프를 보호하는 것입니다 생각. POD 깃발이기 때문에 나는 그것이 적절하게 행동해야한다고 확신합니다, 나는 그것이 현 단계에서 무엇인지 확실히 확신하지 못합니다. 이
static const int MIDTRACE = 3;
static const int NUMTRACES = 2 * MIDTRACE + 1;
static double WEIGHTATI[NUMTRACES];
, 내 코드에 관해서 불행하게도, 내가 얻을 _ 편집 _
class X
{
public:
static int i;
};
int X::i = 0; // definition outside class declaration
:
_ 편집 _ 아, 그것을 가지고 링커 오류 :
meobj.obj : 오류 LNK2020 : 해결되지 않은 토큰 (0A00001C) "개인 정적을 두 번 * 망 : meclass :: PIMPL :: WEIGHTATI"(? WEIGHTATI @ PIMPL @ meclass 망 @ @@ $$ Q0PANA) meobj .OBJ : 오류 LNK2001 : 확인되지 않은 외부 기호 "개인 정적을 두 번 * 망 : meclass :: PIMPL :: WEIGHTATI"(WEIGHTATI @ PIMPL @ meclass 망 @ @@ $$ Q0PANA?)
때문에 내 생성자 :
meclass::PIMPL() {
if (!doneStaticInit) {
double sumOfWeights = 0.0;
for (int i = 0; i < NUMTRACES; i++) {
WEIGHTATI[i] = SQUARED(1 - SQUARED(MAXTRACEWRTMIDTRACE * (MIDTRACE - i)/double(MIDTRACE)));
sumOfWeights += WEIGHTATI[i];
}
for (int i = 0; i < NUMTRACES; i++) WEIGHTATI[i] /= sumOfWeights;
doneStaticInit = true;
}
}
명시 적으로하지 프로그램 초기화 될 것으로 보인다. – John
+1 현재 보급 된 parrallel 프로세서의 엄청난 인기. –
parrallel 가공업자의 거대한 인구는 현재 퍼집니다. ?! 의도적으로 저것을 쓴다고 말해주세요! – Daniel