1

オプションの 2 番目の引数を検索関数に渡そうとしています。

class ExponentialTree
{
public:
node* Search(int num, node* curr_node=root);
void Insert(int num);

private:
node* root;
};

node* ExponentialTree::Search(int num, node* curr_node)
{

1 つのパラメーターで呼び出す場合は、それをルートに設定する必要があります。私は宣言でデフォルトパラメータ、実装でデフォルトパラメータ、両方(私はそれが真実ではないことを知っています)、2つの宣言を試みました。何も機能しませんでした。何か案は?変更される唯一の行であるため、メソッドのオーバーロードは必要ありません。

ありがとう。

4

3 に答える 3

1

これは、オーバーロードを使用することで実際に得られる典型的な例です。

node* Search(int num, node* curr_node) 
{
   // Your implementation
}

その後

inline node* Search(int num) { return Search(num, root); }

これにより、パラメータが指定rootされていない場合は、 の値として使用する必要があることを明示的に述べますcurr_node

NULLコンパイル時にコードを決定できる場合は、ランタイム テストを行う必要はありませんroot

于 2013-11-07T04:20:14.890 に答える
1

非静的メンバー変数は、既定の引数として使用できません。

以下は、関連するセクションですC++ standard draft (N3225), section § 8.3.6, point 9:

.. a non-static member shall not be used in a default argument expression, even if it
is not evaluated, unless it appears as the id-expression of a class member access expression (5.2.5) or unless
it is used to form a pointer to member (5.3.1). [ Example: the declaration of X::mem1() in the following
example is ill-formed because no object is supplied for the non-static member X::a used as an initializer.
int b;
class X {
int a;
int mem1(int i = a); // error: non-static member a
// used as default argument
int mem2(int i = b); // OK; use X::b
static int b;
};

rootここでは非静的メンバー変数です。したがって、デフォルトの引数として指定することはできません。

于 2013-11-06T12:05:13.577 に答える