使用 class 变量作为 class 成员函数的默认参数
Using a class variable as a default argument to the class member function
我正在用 C++ 构建一个 LinkedList。
addNode function
的签名:
const bool LinkedList::addNode(int val, unsigned int pos = getSize());
getSize()
是一个 public 非静态成员函数:
int getSize() const { return size; }
size
是非静态私有成员变量。
但是,我得到的错误是 a nonstatic member reference must be relative to a specific object
如何实现此功能?
仅供参考,完整代码如下:
#pragma once
class LinkedList {
int size = 1;
struct Node {
int ivar = 0;
Node* next = nullptr;
};
Node* rootNode = new Node();
Node* createNode(int ivar);
public:
LinkedList() = delete;
LinkedList(int val) {
rootNode->ivar = val;
}
decltype(size) getSize() const { return size; }
const bool addNode(int val, unsigned int pos = getSize());
const bool delNode(unsigned int pos);
~LinkedList() = default;
};
其他一些尝试包括:
const bool addNode(int val, unsigned int pos = [=] { return getSize(); } ());
const bool addNode(int val, unsigned int pos = [=] { return this->getSize(); } ());
const bool addNode(int val, unsigned int pos = this-> getSize());
我当前使用的当前解决方法:
const bool LinkedList::addNode(int val, unsigned int pos = -1) {
pos = pos == -1 ? getSize() : pos;
//whatever
}
默认参数是从调用方上下文提供的,它只是不知道应该绑定哪个对象来调用。您可以添加另一个包装函数作为
// when specifying pos
const bool LinkedList::addNode(int val, unsigned int pos) {
pos = pos == -1 ? getSize() : pos;
//whatever
}
// when not specifying pos, using getSize() instead
const bool LinkedList::addNode(int val) {
return addNode(val, getSize());
}
我正在用 C++ 构建一个 LinkedList。
addNode function
的签名:
const bool LinkedList::addNode(int val, unsigned int pos = getSize());
getSize()
是一个 public 非静态成员函数:
int getSize() const { return size; }
size
是非静态私有成员变量。
但是,我得到的错误是 a nonstatic member reference must be relative to a specific object
如何实现此功能?
仅供参考,完整代码如下:
#pragma once
class LinkedList {
int size = 1;
struct Node {
int ivar = 0;
Node* next = nullptr;
};
Node* rootNode = new Node();
Node* createNode(int ivar);
public:
LinkedList() = delete;
LinkedList(int val) {
rootNode->ivar = val;
}
decltype(size) getSize() const { return size; }
const bool addNode(int val, unsigned int pos = getSize());
const bool delNode(unsigned int pos);
~LinkedList() = default;
};
其他一些尝试包括:
const bool addNode(int val, unsigned int pos = [=] { return getSize(); } ());
const bool addNode(int val, unsigned int pos = [=] { return this->getSize(); } ());
const bool addNode(int val, unsigned int pos = this-> getSize());
我当前使用的当前解决方法:
const bool LinkedList::addNode(int val, unsigned int pos = -1) {
pos = pos == -1 ? getSize() : pos;
//whatever
}
默认参数是从调用方上下文提供的,它只是不知道应该绑定哪个对象来调用。您可以添加另一个包装函数作为
// when specifying pos
const bool LinkedList::addNode(int val, unsigned int pos) {
pos = pos == -1 ? getSize() : pos;
//whatever
}
// when not specifying pos, using getSize() instead
const bool LinkedList::addNode(int val) {
return addNode(val, getSize());
}