나는 C++을 배우고 있으며 내 문제에 대한 답을 찾지 못하는 것 같습니다. 내 코드를 실행할 때 어떤 컴파일러 오류도 발생하지 않지만 "getVin()"("generate()"함수를 사용하여 임의의 숫자를 생성해야 함) 함수를 호출하면 작동하지 않습니다. 그래서. 0을 출력합니다. (소스 파일)srand function in class
class Vehicle {
public:
Vehicle();
static int generate();
const int getVin() { return m_vin; }
protected:
float m_lla[3];
const int m_vin = s_idgen;
private:
static int s_idgen;
};
그리고 정의 :
이int Vehicle::s_idgen = generate();
Vehicle::Vehicle() {
m_lla[3] = 0;
}
int Vehicle::generate() {
srand((int)time(0));
return (rand() % 10000) + 1;
}
어떤 조언이 도움이 될 것입니다, 감사합니다 여기 내 (헤더 파일) 클래스입니다! 헤더에서
'srand'는 * once *를 호출해야합니다. 예를 들어'time' 함수는 보통 * seconds *의 시간을 반환합니다. 즉,'generate' 함수를 1 초 내에 여러 번 호출하면 동일한 값으로 시드를 재설정하고 동일한 "임의"숫자를 얻습니다 . 또한 C++은 평범한'srand'와'rand'보다 훨씬 더 나은 [pseudo-random generation facility] (http://en.cppreference.com/w/cpp/numeric/random)을 가지고 있습니다. –
이것에 대해 생각해보십시오. 언제 발생합니까? 'const int m_vin = s_idgen;''s_idgen'은 언제 설정 되나요? – juanchopanza
질문이 제안 된 질문과 중복되지 않는다고 생각하지 마십시오. OP 문제는 srand를 반복해서 호출하는 것과 관련이 없지만 @Serge Ballesta anwer에 따라 정적 변수를 초기화하는 순서와 관련이 있습니다. –