C++:单例类设计(错误:未解析的外部符号)

C++: Singleton Class Design (Error: unresolved external symbol)

本文关键字:外部 符号 错误 单例类 C++      更新时间:2023-10-16

我正在Visual Studio上为一个C++项目实现一个单例类设计。它基于此 GitHub 代码示例。从逻辑上讲,我的代码似乎是正确的,但是我的编译器出现了错误。有谁知道出了什么问题?

我有几个单例类。下面是其中一个代码示例。

帐户BG.h

#ifndef ACCOUNTBG_H
#define ACCOUNTBG_H
#include "Lecturer.h"
#include "Student.h"
#include "Type.h"
class AccountBG
{
public:
   static AccountBG* getInstance();
   // GET Methods
   Lecturer* getLecturer();
   Student* getStudent();
   // SET Methods
   void setLecturer(int, string);
   void setStudent(int, string);
private:
   // Singleton class instance
   static AccountBG* instance;
   AccountBG(); // Private constructor to prevent instancing.
   Lecturer *lecturer;
   Student *student;
};
#endif // !ACCOUNTBG_H

帐户BG

.cpp
#include "AccountBG.h"
// Null, because instance will be initialized on demand.
AccountBG* AccountBG::instance = 0;
AccountBG* AccountBG::getInstance() {
    if (instance == 0) {
        instance = new AccountBG();
    }
    return instance;
}
// GET Methods
Lecturer* AccountBG::getLecturer() {
    return this->lecturer;
}
Student* AccountBG::getStudent() {
    return this->student;
}
// SET Methods
void AccountBG::setLecturer(int id, string username) {
    this->lecturer = new Lecturer();
    this->lecturer->setID(id);
    this->lecturer->setUsername(username);
    this->lecturer->setType("Lecturer");
}
void AccountBG::setStudent(int id, string username) {
    this->student = new Student();
    this->student->setID(id);
    this->student->setUsername(username);
    this->student->setType("Student");
}

编译器错误的屏幕截图

VS2015 上出现的错误

未解析的外部符号,通常由调用已声明但未实现的函数引起。

在您的情况下,您没有实现 AccountBG 的构造函数,只是声明。

其他功能可能出现相同的问题:

MarkingData::instance()
Quiz::Quiz()
QuizTracker::QuizTracker()

向这些函数添加实现可能会解决您的问题。