相关疑难解决方法(0)

参数列表中间的默认参数?

我在代码中看到了一个函数声明,如下所示

void error(char const *msg, bool showKind = true, bool exit);
Run Code Online (Sandbox Code Playgroud)

我首先想到这是一个错误,因为你不能在函数中间有默认参数,但是编译器接受了这个声明.谁看过这个吗?我正在使用GCC4.5.这是GCC扩展吗?

奇怪的是,如果我把它放在一个单独的文件中并尝试编译,GCC会拒绝它.我已经仔细检查了所有内容,包括使用的编译器选项.

c++ default-arguments

52
推荐指数
2
解决办法
1万
查看次数

如何在C++中使用成员变量作为默认参数?

我想为其中一个成员函数选择一个参数.如果没有提供参数,它将使用成员变量.

但是,当我尝试编译它时,它显示" 错误:无效使用非静态数据成员'Object :: initPos' "

只是为了隔离问题,我尝试默认一个int类型,它编译得很好.我想知道我的代码有什么问题,以及如何使用成员函数作为默认值.

谢谢您的帮助!

Object.h

class Object
{
    public:
       ...
       void MoveTo(double speed, Point position);

    protected:
       Point initPos; 
       Point currPos;

};
Run Code Online (Sandbox Code Playgroud)

Object.c

void Object::MoveTo(double speed, Point position = initPos)
{
    currPos = postion;
}
Run Code Online (Sandbox Code Playgroud)

Point.h

class Point
{
    ...

    private:
       double x;
       double y;
       double z; 
};
Run Code Online (Sandbox Code Playgroud)

c++ arguments default object

33
推荐指数
3
解决办法
2万
查看次数

为什么成员变量不能用作参数的默认值?

可能重复:
非静态成员作为非静态成员函数的默认参数

如果我错了,请纠正我,但我认为默认参数的工作方式如下:

当编译器看到函数调用时,它开始将参数压入堆栈.当参数耗尽时,它将开始将默认值推送到堆栈,直到填满所有必需参数(我知道这是一个简化,因为参数实际上是从右向左推送的,所以它将从默认值开始,但是想法是一样的).

如果这是真的,为什么不能将成员变量用作默认值?在我看来,由于编译器像往常一样在呼叫站点推送它们,它应该能够解决它们就好了!

编辑由于答案似乎被我的问题误解了,让我澄清一下.我知道情况就是这样,而且我知道该语言允许和不允许的内容.我的问题是为什么语言设计师选择不允许这样做,因为它似乎自然而然地起作用.

c++ language-lawyer default-parameters

6
推荐指数
1
解决办法
233
查看次数

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

可能重复:
c ++公共继承的类成员不能用作默认参数
非静态成员作为非静态成员函数的默认参数

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; 
} …
Run Code Online (Sandbox Code Playgroud)

c++

1
推荐指数
1
解决办法
145
查看次数

默认参数问题(c ++)

可能重复:
非静态成员作为非静态成员函数的默认参数
为什么成员变量不能用作参数的默认值?

好的,如果我没有在这里看到一些非常简单的东西或忘记C++的一些基本规则,我提前道歉但我不确定为什么这不能按预期工作.

这是一个我无法工作的代码示例

class Foo
{
private:
    Bar *ptrBar;
public:
    void doSomething(int x, Bar *p = ptrBar);
}
Run Code Online (Sandbox Code Playgroud)

编译器遇到此函数的默认参数问题.有什么理由说这不起作用.

基本上doSomething会对Bar对象进行一些操作,我希望它是ptrBar默认指向的那个.除非忘记什么,否则一切似乎都是合理的?

c++ pointers class

1
推荐指数
1
解决办法
87
查看次数

c ++默认参数

可能重复:
非静态成员作为非静态成员函数的默认参数

好.所以我在理解如何完成看似简单的任务时遇到了问题......这就是我想要完成的事情:

#include <iostream>

using namespace std;

class A{
private:
    int _x;
public:
    A(int x){
        _x = x;
    }

    void test(int x=_x){
        cout << x << endl;
    }
};

int main(){
    A a(3);
    a.test();
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨该int x=_x部分说error: invalid use of non-static data member A::_x

那么如何使用这样的默认参数呢?

谢谢.

c++

0
推荐指数
1
解决办法
1389
查看次数