C++什么是"instantiated from here"错误?
C++ what is "instantiated from here" error?
我是C++编程的新手,我想知道"从这里实例化"错误是什么?
struct Data {
Data(int a, int b) {
x = a;
y = b;
}
int x;
int y;
};
std::map<int, Data> m;
m[1] = Data(1, 2);
我收到了几个错误信息
- 对"Data::Data()"的调用没有匹配的函数
- "从这里实例化"错误
谢谢。
struct Data
没有默认构造函数。map::operator[]
返回其值类型的默认构造实例,在本例中为struct Data
。
要么提供默认构造函数:
Data() : x(0), y(0) {}
或使用std::map::insert()
:
m.insert(std::pair<int, Data>(1, Data(1, 2)));
C++什么是"从这里实例化"错误?
这不是一个错误,而是上一个错误的延续,添加了额外的信息。编译器添加了error:
前缀,以便更容易读取(或解析)属于错误的行。
您可以将整个块读取为单个错误:
从中实例化的Data::Data()
没有匹配的函数调用
您需要提供一个不带参数的构造函数。
Data::Data(){}
这意味着只有当编译器开始解析(实例化)模板std::map::map()
时,错误("无匹配函数调用"错误)才会变得明显。
当您使用operator[]
将一个项目插入到映射中时,映射会为指定的键插入一个默认构造的对象来引用,然后您分配的值会复制到该默认构造对象中。
要创建默认构造的对象,需要有一个可用的默认构造函数。在您的情况下,如果您指定了一个接受两个参数的构造函数(并且没有为这些参数提供默认值),编译器将自动为您合成一个默认构造函数。
在这种情况下,我可能会把你的构造函数修改成这样:
Data(int a=0, int b=0) : x(a), y(b) {}
请注意,您应该通常更喜欢初始化列表中的变量(如果可能的话),而不是在构造函数的主体中为它们赋值。
调用"Data::Data()"时没有匹配的函数
您需要提供一个默认构造函数。查看此问题的答案:
模板错误:没有合适的默认构造函数可用
"从这里实例化"错误
在全局区域中只能有变量声明。你需要在一个函数中完成这项任务。正确代码:
#include <map>
struct Data {
Data(int a, int b) {
x = a;
y = b;
}
int x;
int y;
Data() {};
};
std::map<int, Data> m;
void main()
{
m[1] = Data(1, 2);
}
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- C++ 字符值 + "-some words here-"但错误 C2110
- 声明列表列表时"required from here"错误
- 无法用C++编写相同的 Java 代码"cannot initialize class member here"因为错误
- C++什么是"instantiated from here"错误?
- 绕过"first defined here"错误的方法?
- 错误 C2259:无法实例化抽象类;或"how exactly should i be using virtual functions here?"