我做了一個類命名客戶端和定義下面進去client.h:未定義參照在C + +(使用一個單獨的類)錯誤
#ifndef __CLIENT_H__
#define __CLIENT_H__
#include <string>
using namespace std;
class Client {
public:
Client(string n, string p) : name(n), password(p) {logged_in = true;}
void set_name(string n, string p) {name=n; password=p; }
private:
string name;
string password;
bool logged_in;
};
#endif
然後我繼承一個單件類從客戶端名爲Admin在admin.h:
#ifndef __ADMIN_H__
#define __ADMIN_H__
#include "client.h"
using namespace std;
class Admin : public Client {
public:
static Admin* get_admin(string n, string p)
{
if (Admin::n == 0)
Admin::admin = new Admin(n, p);
else
Admin::admin->set_name(n, p);
return Admin::admin;
}
private:
Admin(string n, string p) : Client(n, p) {Admin::n++;}
static int n;
static Admin* admin;
};
int Admin::n = 0;
#endif
這裏是我的main.cpp:
#include <iostream>
#include <string>
#include "client.h"
#include "admin.h"
using namespace std;
int main()
{
Admin* administrator = Admin::get_admin("ghamar", "utcom90");
}
,問題是,當我想要編譯爲主。 CPP使用G ++(G ++ main.cpp中),我收到以下錯誤:
/tmp/cc15VnHc.o: In function `Admin::get_admin(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
main.cpp:(.text._ZN5Admin9get_adminESsSs[Admin::get_admin(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)]+0x5f): undefined reference to `Admin::admin'
main.cpp:(.text._ZN5Admin9get_adminESsSs[Admin::get_admin(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)]+0xa0): undefined reference to `Admin::admin'
main.cpp:(.text._ZN5Admin9get_adminESsSs[Admin::get_admin(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)]+0xd1): undefined reference to `Admin::admin'
錯誤的重要組成部分,說:
undefined reference to 'Admin::admin'
任何人可以幫助我這個?非常感謝您的時間。
,我不能假設:
刪除的
Admin::n
從admin.h的定義,並添加以下到一個源文件即Admin :: n = 0;會被定義一次? (多重定義錯誤) – Homie@Homie。不可以。包含警衛只會阻止文本在單個翻譯單元中出現*。如果您有多個翻譯單元(例如多個.CPP文件),則該定義將出現在每個翻譯單元中。 –