C++中的模板和映射
Template and map in C++
我在c++中有以下代码,涉及模板:
#include <assert.h>
#include <map>
#include <limits>
template<class K, class V> class interval_mapping {
private:
std::map<K,V> aMap;
public:
interval_mapping( V const& val) {
aMap.insert(
aMap.begin(),
std::make_pair(std::numeric_limits<K>::min(),val)
);
}
void assign( K const& keyBegin, K const& keyEnd, const V& val ) {}
V const& operator[]( K const& key ) const {
return ( --m_map.upper_bound(key) )->second;
}
};
int main()
{
interval_mapping<int, char> myMap;
}
我得到错误:
类"interval_mapping"不存在默认构造函数
这个错误应该是不言自明的:您在构建interval_mapping
对象时没有传递任何参数,所以该类需要一个默认的构造函数。默认构造函数只有在您自己不提供任何其他构造函数的情况下才由编译器自动生成。
你不需要默认的构造函数来做任何特殊的事情,所以你可以添加
interval_mapping() {}
到类,或
interval_mapping() = default;
如果您的编译器支持C++11。
如果您确实不希望类具有默认构造函数,则需要在main()
中创建对象的行中提供一个参数。
正如错误所说,没有默认的构造函数,因为您已经声明了自己的构造函数。
要么使用该构造函数
interval_mapping<int, char> myMap(some_char_value);
或者添加默认构造函数;你可能希望它一开始是空的:
interval_mapping() {}
您为接受V const& val
的interval_mapping
声明一个构造函数。这是为interval_mapping
声明的唯一构造函数,并且没有提供默认构造函数,因为您已经实现了自己的构造函数。
然后,当您尝试实例化interval_mapping<int, char>
时,您无法提供构造函数所需的V const& val
(在这种情况下,似乎是char
)。由于没有可用的构造函数不接受任何参数,所以您会看到这个错误。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++映射分割错误(核心转储)
- 内联映射初始化的动态atexit析构函数崩溃
- 使用"std::unordereded_map"映射到"std::list"对象
- 如何从多映射中删除特定的重复项
- 在未初始化映射的情况下,将值插入到映射的映射中
- QT通过C++添加映射QML项目
- 在c++中访问int到类对象的映射时出错
- 在C++中搜索嵌套多映射值
- 错误处理.将系统错误代码映射到泛型
- C++匿名结构作为std::映射值
- 如何从存储在std::映射中的std::集中删除元素
- 递归无序映射
- 正在VS调试器中监视映射条目