2014-06-18 7 views
4

왜 오지 않아요 C는 값을 전달이

는 기본 매개 변수가 허용되기 때문에

void insertData (T data1,Tree<T> *tree=TreeTop); 

을 허용 ++ 함수 C++의 기본 매개 변수로 변수를 전달하지만, 왜 기본 paramaeter 같은 변수 ...? ?

class BinaryTree 
{ 
    private : 

    Tree<T> *TreeTop; 
    unsigned int numberOfElements; 

    public : 
      void insertData (T data1,Tree<T> *tree=TreeTop); 
      // Only Prototype For Question Purpose 
    } 
+0

을 할 것입니다 네 같은 의심 .. !! Dint Find on Find .. – PRP

답변

0

당신은이 같은 과부하 만들 수 있습니다 : 당신이 정적 나무 꼭대기 할 경우

void insertData(T data1) { 
    insertData(data1, TreeTop); 
} 

void insertData(T data1, Tree<T> *tree) { 
    // Code 
} 
+0

예. 나는 단지 같은 일을했다 ... 컴파일러가 변수를 기본 인수로 전달하기 위해 기술적 인 어려움을 겪고 있는지 알고 싶었다. ... – PRP

0

이 작동합니다 :이 경우

class BinaryTree 
{ 
    private : 

    static Tree<T> *TreeTop; 
    unsigned int numberOfElements; 

    public : 
      void insertData (T data1,Tree<T> *tree=TreeTop); 

} 

를, 그것은 클래스 수준의 기본값이됩니다 "insertData"메소드 호출에 대해. 당신은 인스턴스 수준의 기본을 원하는 경우에, 당신은 대신 구현,

class BinaryTree 
{ 
    private : 

    Tree<T> *TreeTop; 
    unsigned int numberOfElements; 

    public : 
      void insertData (T data1,Tree<T> *tree=NULL); 

} 

다음과 같은 뭔가를해야

public void BinaryTree::insertData(T data1, Tree<T> *tree) 
{ 
    if (tree==null) tree=TreeTop; 
    ... 
} 
+0

당신은'nullptr'을 의미한다. C++ 03) 대신 'null'을 사용합니다. – Jarod42

+0

'nullptr '은 * 유효한 * 입력이 아니라고 가정합니다. – Jarod42

+0

@ Jarod42 - 네, 두뇌에 C#이 생겼습니다 ~. 또한 두 번째 지점에서 수정 - null이 유효한 입력이 아니라고 가정합니다. null가 유효하면 이전 포스터의 오버로드 방식을 사용합니다. – T3am5hark