C++ 已停止工作静态映射函数
c++ has stopped working static map function
我创建了两个类:包和继承包类的旅游包。旅游套餐类包含目的地向量。我已经创建了一个包向量,现在我希望向量中的每个目的地显示出现次数。我创建了一个静态映射和一个返回映射的静态函数,以便我可以从主函数访问它。但是当我尝试显示地图时,程序会显示,但随后说它已停止工作。如果我将地图设为公开,那么它可以工作,但我希望它是私有的
旅游套餐:
#ifndef TourPackage_H
#define TourPackage_H
#include "Package.h"
#include <vector>
#include <string>
#include <iostream>
#include <map>
using namespace std;
class TourPackage: public Package
{vector <string> destinations;
int lenght;
static map <string, int> frequency;
public:
TourPackage(double, int lenght);
virtual ~TourPackage();
static map <string, int> frequencies ()
{
return frequency;
}
protected:
private:
};
#endif
旅游套餐.cpp:
#include "TourPackage.h"
TourPackage::TourPackage(double price,int n):Package (price)
{
string aux;
int max1=0;
lenght=n;
string x;
for (int i=0;i<lenght;i++)
{getline (cin, x);
destinations.push_back(x);
++frequency[destinations[i]];}
}
TourPackage::~TourPackage()
{
//dtor
}
主.cpp
#include <iostream>
#include <vector>
#include <string>
#include "TourPackage.h"
#include <typeinfo>
#include <map>
#include <utility>
#include <algorithm>
using namespace std;
map <string, int> TourPackage::frequency;
bool comp (const pair <string, int> &l, const pair <string, int> &r)
{
if (l.second!=r.second)
return l.second>r.second;
return l.first>r.first;
}
int main()
{TourPackage p(2,4);
vector <Package*> Packages;
Packages.push_back (new Package (1000));
Packages.push_back (new Package (4234));
Packages.push_back (new TourPackage (32,3));
Packages.push_back (new TourPackage (234, 4));
Packages.push_back(new TourPackage (43, 5));
for (map <string, int>::const_iterator is=TourPackage::frequencies().begin(); is!=TourPackage::frequencies().end();is++)
cout<<is->first<<" "<<is->second<<" ";
cout<<endl;
cout<<endl;
return 0;
}
您已经声明了如下frequencies
函数:
static map <string, int> frequencies ()
也就是说,它按值返回映射。
这意味着
is=TourPackage::frequencies().begin();
和
is!=TourPackage::frequencies().end()
其中每个调用返回一个不同的对象。来自不同映射的迭代器无法相互比较,尝试这样做将导致未定义的行为。
更改frequencies
函数以返回引用:
static map <string, int>& frequencies ()
// ^
// Returning a reference
相关文章:
- enable_if转换构造函数(静态强制转换,is_base_of)
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 声明和定义函数静态会产生"undefined reference to function_name()"
- C++ 已停止工作静态映射函数
- C 11多态映射键静态断言失败:哈希函数必须与密钥类型的参数无关
- 有没有一种方法可以使全局函数/静态成员函数一次可呼出
- C++中的映射函数
- C++ - 模板类 -> 静态函数 -> 静态函数指针的链接错误
- 如何在C 11中创建指针映射以静态成员功能
- 获取 llvm::函数静态地址
- 成员函数静态变量与成员变量
- 从 lambda 内部返回 C++11 中的 lambda 类型(平面映射函数)
- 如何将值传递给MFC消息映射函数on_command
- 具有一对映射的静态初始化
- 如何将sqlite3+扩展函数静态链接到C/C++应用程序中
- 创建高阶映射函数时,应该使用指针、引用或值
- Visual Studio 2015 Natvis如何显示函数静态变量
- 返回一个指向函数静态数据的指针合适吗
- 什么是 C++ 中的映射函数
- 使用变量参数映射函数并通过字符串 c++ 调用