这是构造函数问题(引用已删除的函数)吗? (错误代码 C2280)
Is this a constructor problem (referencing deleted function)? (error code C2280)
我有一个class‘Token’和一个class‘Token_Stream’,如下代码所示。
当我尝试创建 class Token_Stream 的对象时,出现编译错误:(C2280) 'Token_stream::Token_stream(void)': attempting to reference a deleted function
我正在使用 C++ Visual Studio 社区 15.9.1。我是 "modern" 编程的新手,并从 Stroustrup 的书 PPP C++ 第 2 版自学 C++。我已经阅读了很多在本网站搜索 "c++ attempting to reference a deleted function c2280," 的结果,但 none 帮助我解决了问题。
我对构造函数的理解是不完整的,尽管阅读了几个关于它们的网页和书籍部分,但我的理解足以(我认为)认为这是一个构造函数问题。我肯定在与用户定义的 class 作斗争,它包括一个成员,该成员是另一个用户定义的 class 加上成员函数。
代码如下。如果 Token_stream 的两个成员函数的声明有帮助,请告诉我,我会添加它们。
class Token {
public:
char kind;
double value;
Token(char ch) // make a Token from a char
//- this is a constructor, right?
:kind(ch), value(0) { } // what do the braces here mean?
Token(char ch, double val) // make a Token from a char and a double
:kind(ch), value(val) { }
};
class Token_stream {
public:
Token get();
void putback(Token t);
private:
bool full{ false };
Token buffer;
// Token_stream() = default;
};
Token_stream ts; // ERROR C2280 here
// Token_stream::Token_stream(void)': attempting
// to ref. a deleted function
问题是你的 Token
class。您没有 Token
的默认构造函数,但您在 Token_stream
中有一个成员属性 Token buffer;
,它将在 Token_stream
的实例化时初始化。 Token
没有默认构造函数。因此,编译器无法为 Token_stream
添加默认构造函数。
gcc 8.2 显示以下 error/note:
note: 'Token_stream::Token_stream()' is implicitly deleted because the default
definition would be ill-formed
error: no matching function for call to 'Token::Token()'
这显示了为 Token_stream
创建默认构造函数的问题。
您可以简单地为 Token
添加一个默认构造函数,它应该可以工作。enter code here
我有一个class‘Token’和一个class‘Token_Stream’,如下代码所示。 当我尝试创建 class Token_Stream 的对象时,出现编译错误:(C2280) 'Token_stream::Token_stream(void)': attempting to reference a deleted function
我正在使用 C++ Visual Studio 社区 15.9.1。我是 "modern" 编程的新手,并从 Stroustrup 的书 PPP C++ 第 2 版自学 C++。我已经阅读了很多在本网站搜索 "c++ attempting to reference a deleted function c2280," 的结果,但 none 帮助我解决了问题。
我对构造函数的理解是不完整的,尽管阅读了几个关于它们的网页和书籍部分,但我的理解足以(我认为)认为这是一个构造函数问题。我肯定在与用户定义的 class 作斗争,它包括一个成员,该成员是另一个用户定义的 class 加上成员函数。
代码如下。如果 Token_stream 的两个成员函数的声明有帮助,请告诉我,我会添加它们。
class Token {
public:
char kind;
double value;
Token(char ch) // make a Token from a char
//- this is a constructor, right?
:kind(ch), value(0) { } // what do the braces here mean?
Token(char ch, double val) // make a Token from a char and a double
:kind(ch), value(val) { }
};
class Token_stream {
public:
Token get();
void putback(Token t);
private:
bool full{ false };
Token buffer;
// Token_stream() = default;
};
Token_stream ts; // ERROR C2280 here
// Token_stream::Token_stream(void)': attempting
// to ref. a deleted function
问题是你的 Token
class。您没有 Token
的默认构造函数,但您在 Token_stream
中有一个成员属性 Token buffer;
,它将在 Token_stream
的实例化时初始化。 Token
没有默认构造函数。因此,编译器无法为 Token_stream
添加默认构造函数。
gcc 8.2 显示以下 error/note:
note: 'Token_stream::Token_stream()' is implicitly deleted because the default
definition would be ill-formed
error: no matching function for call to 'Token::Token()'
这显示了为 Token_stream
创建默认构造函数的问题。
您可以简单地为 Token
添加一个默认构造函数,它应该可以工作。enter code here