我想用C ++制作DVD租赁应用程序。我已经完成了客户类的基础知识,另一个类是持有CustomerDB的客户ID。每个客户都有一个唯一的ID 我想在进一步执行程序之前测试CustomerDB,但是在编译程序时出现错误。
这是我写的代码:
标题文件:
// 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) {
if (!doesThreeLettersOfNameExist(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;
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;
}
我得到的错误是:
C:\Users\KiKo-SaMa\Desktop\C++>g++ DVD_App.cpp
C:\Users\KIKO-S~1\AppData\Local\Temp\ccSsS5HX.o:DVD_App.cpp:(.text$_ZN10Customer
DB14addNewToIdListERKSs[CustomerDB::addNewToIdList(std::basic_string<char, std::
char_traits<char>, std::allocator<char> > const&)]+0x59): undefined reference to
`CustomerDB::idList'
C:\Users\KIKO-S~1\AppData\Local\Temp\ccSsS5HX.o:DVD_App.cpp:(.text$_ZN10Customer
DB27doesThreeLettersOfNameExistERKSs[CustomerDB::doesThreeLettersOfNameExist(std
::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)]+0x1
0): undefined reference to `CustomerDB::idList'
C:\Users\KIKO-S~1\AppData\Local\Temp\ccSsS5HX.o:DVD_App.cpp:(.text$_ZN10Customer
DB10nextNumberERKSs[CustomerDB::nextNumber(std::basic_string<char, std::char_tra
its<char>, std::allocator<char> > const&)]+0x10): undefined reference to `Custom
erDB::idList'
collect2: ld returned 1 exit status
我的计划有什么问题?
答案 0 :(得分:7)
您已声明静态变量idList(在.h文件中),但未定义它(在.cpp文件中) e.g。
map<string, int> CustomerDB::idList;
int main () {
...
}