gpt4 book ai didi

c++ 公共(public)继承的类成员不能用作默认参数

转载 作者:太空狗 更新时间:2023-10-29 20:01:16 26 4
gpt4 key购买 nike

我的问题的示意图...

class A
{
public:
// etc.
protected:
uint num;
};

class B : public A
{
public:
void foo(uint x = num); //bad
};

给出这个错误:

error: invalid use of non-static data member ‘A::num’
error: from this location

为什么会发生这种情况,我该怎么做才能解决这个问题?

最佳答案

我怀疑会发生这种情况(基于对非静态性的提示),因为没有 this 指针可以用来知道 它应该获取 B 的哪个实例num 来自.

Microsoft 编译器(至少)允许您指定一个表达式,但不能指定一个非静态成员。来自 MSDN :

The expressions used for default arguments are often constant expressions, but this is not a requirement. The expression can combine functions that are visible in the current scope, constant expressions, and global variables. The expression cannot contain local variables or non-static class-member variables.

解决这个问题的方法很多,其他人也指出了一些。这是您可能喜欢或不喜欢的另一个:

void foo(uint* x = NULL) {
uint y = (x == NULL ? num : *x);
// use y...
}

关于c++ 公共(public)继承的类成员不能用作默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com