我想使用非静态对象变量作为默认方法参数

时间:2012-03-20 17:41:15

标签: c++

  

可能重复:
  c++ publicly inherited class member cannot be used as default argument
  Nonstatic member as a default argument of a nonstatic member function

LinkedInteger accessElement(int index, LinkedInteger *startElement=&DataArray[0]){ // Starting at *startElement*, returns the element which is at the index of *startElement+index

    LinkedInteger NullElement;
    if (index<0){
        cout << "Index degeri sifirdan buyuk olmalidir" << endl;
        NullElement.value=0;
        NullElement.nextPtr=0;
        return NullElement;
    }       
    for (int i=0; i<index; i++){
        if (startElement->nextPtr == NULL){ // Last elements index is null.
            cout << " Erismeye calistiginiz eleman dizi sinirlarinin disindadir " << endl;
            NullElement.value=0;
            NullElement.nextPtr=0;
            return NullElement;}
        else {
            startElement=startElement->nextPtr;
        }
    }
    return *startElement; 
}

这是一种在c ++中实现链接列表的方法,它只是允许访问列表元素 我想将标题作为默认参数(实际上是DataArray [0])。 它失败是因为错误“无效使用非静态数据成员”。

this->&DataArray[0]

也失败了,因为“这可能不会在这种情况下使用”我该怎么办?

此外,代码的上下文也存在一些问题。请忽略它们。

3 个答案:

答案 0 :(得分:5)

使用重载:

LinkedInteger accessElement(int index){
  return accessElement(index, &DataArray[0]);
}

答案 1 :(得分:1)

尝试:

// 0 or NULL; your preference

LinkedInteger accessElement(int index, LinkedInteger *startElement = 0)
{
   if (startElement == 0)
       startElement = &DataArray[0];  // or just startElement = DataArray;
   // ...
}

答案 2 :(得分:-1)

参数的默认值必须是静态已知的。您不能将运行时值用作默认参数。

后者失败了,因为它不是一个有效的语法,几乎没有任何意义。