我编写了C ++代码,似乎没有错。我使用Code :: Blocks作为IDE,并没有给我任何警告或任何错误,但是当我运行它时,它给了我说我的exe文件没有响应的框。
我的代码如下:
标题文件:
// DVD_App.h - Header File
#include <string>
#include <map>
using namespace std;
enum Status {ACTIVE, INACTIVE};
class Customer {
private:
string id;
string name;
string address;
Status status;
public:
Customer (const string&, const string&, const Status);
string &getId () { return id; }
};
class CustomerDB {
private:
static map<string, int> idList;
public:
static void addNewToIdList (const string &threeLetterOfName) {
idList.insert(pair<string, int>(threeLetterOfName, 0));
}
static bool doesThreeLettersOfNameExist (const string &threeLetterOfName) {
map<string, int>::iterator i = idList.find(threeLetterOfName);
if ((i->first).compare(threeLetterOfName) != 0)
return false;
return true;
}
static int nextNumber (const string &threeLetterOfName) {
map<string, int>::iterator i = idList.find(threeLetterOfName);
++(i->second);
return i->second;
}
};
源代码:
// DVD_App.cpp - C++ Source Code
#include <iostream>
#include <string>
#include "DVD_App.h"
using namespace std;
map<string, int> CustomerDB::idList;
Customer::Customer (const string &cName, const string &cAddress, const Status cStatus) : name(cName), address(cAddress), status(cStatus) {
string threeLetters = name.substr(0, 3);
if (CustomerDB::doesThreeLettersOfNameExist(threeLetters))
threeLetters += "" + CustomerDB::nextNumber(threeLetters);
else {
CustomerDB::addNewToIdList(threeLetters);
threeLetters += "0";
}
}
int main () {
Customer k ("khaled", "beirut", ACTIVE);
cout << k.getId() << endl;
return 0;
}
我想首先检查我的CustomerDB类是否正常工作,但由于程序没有运行,我不能。任何帮助将不胜感激。
答案 0 :(得分:2)
您的idList
最初为空,因此当您致电doesThreeLettersOfNameExist
时,i
返回的迭代器find()
将成为end()
迭代器。不是解除引用。
答案 1 :(得分:1)
如果i == idList.end()
,您应该检查函数doesThreeLettersOfNameExist。如果发生这种情况,您无法检查if ((i->first).compare(threeLetterOfName) != 0)
。并通过第一次迭代发生的方式。同时将其添加到nextNumber。