2015-01-11 3 views
-1

일을 해달라고C++는 기본 함수 매개 변수 내가 기본 매개 변수를 필요로하는 기능을 가지고

LINE 84: 
    void game::genRand(double offset_x = 0.0, double offset_y = 0.0) { 
     perlin.SetFrequency(0.1); 
     for(int _x=0; _x<dimensions.x/32; _x++){ 
      for(int _y=0; _y<dimensions.y/32; _y++){ 
       vec.push_back((perlin.GetValue(_x+offset_x, _y+offset_y, 0.2)+1.f)*2/2); 
      } 
     } 
    } 

오류 :

make 
g++ main.cpp -w -std=c++11 -lsfml-graphics -lsfml-window -lsfml-system -lnoise -o main 
main.cpp:84:64: error: default argument given for parameter 1 of ‘void game::genRand(double, double)’ [-fpermissive] 
void game::genRand(double offset_x = 0.0, double offset_y = 0.0) { 
                   ^
main.cpp:13:14: note: previous specification in ‘void game::genRand(double, double)’ here 
     void genRand(double offset_x = 0.0, double offset_y = 0.0); 
      ^
main.cpp:84:64: error: default argument given for parameter 2 of ‘void game::genRand(double, double)’ [-fpermissive] 
void game::genRand(double offset_x = 0.0, double offset_y = 0.0) { 
                   ^
main.cpp:13:14: note: previous specification in ‘void game::genRand(double, double)’ here 
     void genRand(double offset_x = 0.0, double offset_y = 0.0); 
      ^

난 몰라 내가 뭘 잘못했는지 이해해.

+4

함수 정의에서 기본값을 제거합니다. 선언문에서만 필요합니다. – juanchopanza

+2

기본 인수는 정의가 아닌 선언에서만 지정합니다 (인라인이 아닌 경우). –

+0

기본 인수는 선언에서만 사용됩니다. 컴파일러가 이미 값을 알아야 함수를 정의하고 구현할 때 (함수 자체로서 값을 얻는다는 것을 알게되고 변수는 항상 존재합니다) ... –

답변

0

함수 (본문)의 정의를 별도로 작성할 때 더 이상 default parameter을 가져 오면 안됩니다.

실제로 기본 매개 변수 값은 호출자가 보는 유일한 값이므로 선언에 나타나야합니다.

반복 함수 인수 목록에서 기본값에 언급 좋은 방법이 될 것입니다 :

void foo(int x = 42, 
     int y = 21); 

void foo(int x /* = 42 */, 
     int y /* = 21 */) 
{ 
    ... 
}