无法在 class 构造函数范围内初始化指针
Fail to initialise a pointer inside a class constructor scope
在 C++ 17 中,当尝试通过非默认构造函数的作用域(不在成员初始化器列表中)初始化成员指针时,将引发错误,如下所述:
error: expression cannot be used as a function
为什么这个无效?我从错误中了解到指针已被隐式初始化,因此无法调用构造函数。我已经阅读了标准中的相关段落,但仍然不清楚,因为它指出它确实应该还没有被初始化,因此我的代码应该是有效的。
class Container{
private:
int length;
double* data;
public:
Container(): length(0), data(nullptr) {}
Container(const int length): length(length) {data(nullptr)}
};
int main()
{
Container a(2);
}
这个:
Container(const int length): length(length) {data(nullptr)}
应该是:
Container(const int length): length(length), data(nullptr) {}
初始化只能在构造函数初始化列表中。在函数体中,data(nullptr)
被解析为函数调用(正如编译器在消息中所告知的那样)。
如果你想在函数体内设置一个值,你必须使用普通赋值:
data = nullptr;
在 C++ 17 中,当尝试通过非默认构造函数的作用域(不在成员初始化器列表中)初始化成员指针时,将引发错误,如下所述:
error: expression cannot be used as a function
为什么这个无效?我从错误中了解到指针已被隐式初始化,因此无法调用构造函数。我已经阅读了标准中的相关段落,但仍然不清楚,因为它指出它确实应该还没有被初始化,因此我的代码应该是有效的。
class Container{
private:
int length;
double* data;
public:
Container(): length(0), data(nullptr) {}
Container(const int length): length(length) {data(nullptr)}
};
int main()
{
Container a(2);
}
这个:
Container(const int length): length(length) {data(nullptr)}
应该是:
Container(const int length): length(length), data(nullptr) {}
初始化只能在构造函数初始化列表中。在函数体中,data(nullptr)
被解析为函数调用(正如编译器在消息中所告知的那样)。
如果你想在函数体内设置一个值,你必须使用普通赋值:
data = nullptr;