删除了 'simple_vector::simple_vector(int)' 的定义

Posted

技术标签:

【中文标题】删除了 \'simple_vector::simple_vector(int)\' 的定义【英文标题】:Deleted definition of 'simple_vector::simple_vector(int)'删除了 'simple_vector::simple_vector(int)' 的定义 【发布时间】:2019-03-25 00:27:00 【问题描述】:

我正在使用动态数组在 C++ 中创建一个简单的向量类。必须删除带有int 参数的构造函数。

我有两个错误:

从我的 cpp 文件中删除了 simple_vector::simple_vector(int) 的定义。

我的 hpp 文件中 simple_vector::simple_vector(int) 的先前声明。

发生了什么事?我班的名字是simple_vector。它只能包含double 元素。

老实说,我不知道该怎么做。

Hpp 文件

simple_vector(const int a);

Cpp 文件

simple_vector::simple_vector(const int a) = delete;

【问题讨论】:

明确构造函数。 ***.com/questions/121162/… @RetiredNinja 如果删除的函数不是显式的,你会得到更好的错误消息(当试图隐式转换时,“没有可行的函数”变成“使用删除的函数”,这使得你无法构造意图来自int更清晰) 除非您计划为每个可能转换的类型编写已删除的构造函数,否则如果您不想要隐式转换,那么显式仍然是一个好主意。不一定非要如此。 作为一个信息点,C++ 不支持动态数组。 【参考方案1】:

您不能在cpp 文件中的定义 上将您的构造函数标记为delete'd,您需要在其声明 中将其标记为hpp 文件。

hpp 文件中,更改:

simple_vector(const int a);

到这里:

simple_vector(const int) = delete;

cpp 文件中,将其完全删除:

simple_vector::simple_vector(const int a) = delete;

【讨论】:

毕竟,如果 =delete 隐藏在另一个翻译单元中,编译器如何将使用标记为错误?

以上是关于删除了 'simple_vector::simple_vector(int)' 的定义的主要内容,如果未能解决你的问题,请参考以下文章

win7下装了双系统,后来删除了Ubuntu,现在怎么删除Ubuntu开机引导项?

回收站里的内容怎么自动删除了?。。。

dmserver是什么东西,中病毒了可以删除吗?

怎样删除虚拟机下的Linux

datagridview行删除时,之前都能删除,但就是最后一行删除时,数据库删除了,但datagridview却还显示它。

如果我一开始下载了jdk后来又删除了(是通过删除java文件包)请问是不是合理,这样删除成功了吗