导致链接器错误的单例:“已定义”

丹尼尔976034

我写了一个简单的类来管理当前执行会话。因此,我决定使用单例模式,但是编译在链接的步骤中崩溃。这是错误:

error LNK2005: "class Session * session" (?session@@3PAVSession@@A) already defined in ClientTsFrm.obj
(...)client\FrmSaveChat.obj TeamTranslate
error LNK2005: "class Session * session" (?session@@3PAVSession@@A) already defined in ClientTsFrm.obj
(...)client\Login.obj TeamTranslate
error LNK2019: unresolved external symbol "protected: __thiscall Session::Session(void)" (??0Session@@IAE@XZ)
  referenced in function "public: static class Session * __cdecl Session::Instance(void)" (?Instance@Session@@SAPAV1@XZ)
(...)client\Session.obj TeamTranslate
error LNK2001: unresolved external symbol "private: static char const * const Session::_nick" (?_nick@Session@@0PBDB)
(...)client\Session.obj TeamTranslate
error LNK2001: unresolved external symbol "private: static char const * const Session::_service" (?_service@Session@@0PBDB)
(...)client\Session.obj TeamTranslate
error LNK2001: unresolved external symbol "private: static char const * const Session::_serverAddress" (?_serverAddress@Session@@0PBDB)
(...)client\Session.obj TeamTranslate
error LNK2001: unresolved external symbol "private: static char const * const Session::_googleAPI" (?_googleAPI@Session@@0PBDB)
(...)client\Session.obj TeamTranslate
error LNK2001: unresolved external symbol "private: static char const * const Session::_language" (?_language@Session@@0PBDB)
(...)client\Session.obj TeamTranslate
error LNK2001: unresolved external symbol "private: static int Session::_numbLanguageSelected" (?_numbLanguageSelected@Session@@0HA)
(...)client\Session.obj TeamTranslate
error LNK2001: unresolved external symbol "private: static char const * const Session::_translationEngine" (?_translationEngine@Session@@0PBDB)
(...)client\Session.obj TeamTranslate
error LNK1120: 8 unresolved externals
(...)client\bin\TeamTranslate.exe TeamTranslate
IntelliSense: identifier "wxZipStreamLink" is undefined
(..)\include\wx\zipstrm.h 417 5

session.h(单例)

#ifndef __SESSION_H__
#define __SESSION_H__

#include <cstring>
#include <stdio.h>

class Session {
public:
    static Session* Instance();

    void setNick(char* nick);
    const char* getNick();

    void setService(char* serv);
    const char* getService();

    void setLanguage(char* lang);
    const char* getLanguage();

    const char* getServerAddress();
    void setServerAddress(char *sv);

    void setGoogleAPIKey(char* code);
    const char* getGoogleAPIKey();

    void setNumbLanguageSelected(int v);
    int getNumbLanguageSelected();

    const char* Session::getTranslationEngine();
    void Session::setTranslationEngine(char *sv);

    char* Session::getGoogleURLTranslation();

    void update();
    bool read();
protected:
    Session();
private:
    static Session* _instance;
    static const char* _nick; //  client nickname
    static const char* _service; // service used to translation (Google, Bing,....)
    static const char* _serverAddress;
    static const char* _googleAPI;
    static const char* _language;
    static int _numbLanguageSelected;
    static const char* _translationEngine;
};

#endif

Session.cpp

#include "Session.h"

Session* Session::_instance = 0;

Session* Session::Instance() {
    if (_instance == 0) {
        _instance = new Session;
        _instance->read();
    }
    return _instance;
}

void Session::setGoogleAPIKey(char* code){
    _googleAPI = strdup(code);
}

const char* Session::getGoogleAPIKey(){
    return _googleAPI;
}

void Session::setLanguage(char* lang){
    _language = strdup(lang);
}

const char* Session::getLanguage(){
    return _language;
}

void Session::setNick(char* nick){
    _nick = strdup(nick);
}

const char* Session::getNick(){
    return _nick;
}

void Session::setService(char* serv){
    _service = strdup(serv);
}

const char* Session::getService(){
    return _service;
}

const char* Session::getServerAddress(){
    return _serverAddress;
}

void Session::setServerAddress(char *sv){
    _serverAddress = strdup(sv);
}

void Session::setNumbLanguageSelected(int v){
    this->_numbLanguageSelected = v;
}
int Session::getNumbLanguageSelected(){
    return _numbLanguageSelected;
}

const char* Session::getTranslationEngine(){
    return _translationEngine;
}

void Session::setTranslationEngine(char* sv){
    _translationEngine = strdup(sv);
}


void Session::update(){
    FILE* config = fopen("conf\\config.txt", "w");
    fprintf(config, "%s\n", _serverAddress);
    fprintf(config, "%s\n", _nick);
    fprintf(config, "%d\n", _numbLanguageSelected);
    fprintf(config, "%s\n", _language);
    fprintf(config, "%s", _translationEngine);
    fflush(config);
    fclose(config);
}

bool Session::read(){
    FILE * config;
    if (config = fopen("conf\\config.txt", "r"))
    {
        fscanf(config, "%s", _serverAddress);
        fscanf(config, "%s", _nick);
        fscanf(config, "%d", _numbLanguageSelected);
        fscanf(config, "%s", _language);
        fscanf(config, "%s", _translationEngine);
        fflush(config);
        fclose(config);
        return true;
    } else
        return false;
}


 char* Session::getGoogleURLTranslation(){
    return "https://www.googleapis.com/language/translate/v2?key=";
}

有关如何称为单例的示例:

#include "../data/Session.h"

static Session* session = Session::Instance();

您能帮我解决错误吗?

提前致谢。

莫尔布德尼洛

您的标题之一(您没有显示,但同时包含在“ ClientTsFrm.cpp”和“ FrmSaveChat.cpp”中)定义了一个名为“ session”的变量Session*

其他错误是由于您忘记定义的大多数静态成员引起的Session

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

已定义链接器错误

来自分类Dev

定义静态类字段时多个已定义符号的链接器错误

来自分类Dev

MFC项目导致“多个定义”链接器错误?

来自分类Dev

fsanitize =未定义会导致链接器错误

来自分类Dev

python __setattr__导致已定义变量的属性错误

来自分类Dev

GITkit导致链接器错误

来自分类Dev

使用COM接口时出现“链接错误:已定义”

来自分类Dev

类型A已定义错误

来自分类Dev

错误已定义

来自分类Dev

Java编译器错误变量已定义

来自分类Dev

单例错误

来自分类Dev

...链接器错误的多个定义

来自分类Dev

...链接器错误的多个定义

来自分类Dev

添加WatchKit导致链接器错误-拱形arm64的入口点(_main)未定义

来自分类Dev

预期的单例错误“ for”循环-Odoo服务器操作

来自分类Dev

sf::Sound 函数导致链接器错误

来自分类Dev

Windows表单已定义的错误

来自分类Dev

如何定义单例集?

来自分类Dev

c ++单例,奇怪的错误

来自分类Dev

预期的单例错误 odoo

来自分类Dev

由于Spring单例导致内存泄漏

来自分类Dev

定义装饰器的使用次数(带装饰器的单例模式)

来自分类Dev

了解 C 链接器错误:多重定义

来自分类Dev

使用单例模式的JavaScript函数链接

来自分类Dev

红宝石中的单例方法链接

来自分类Dev

使用单例模式的JavaScript函数链接

来自分类Dev

运行测试用例时,CocoaLumberJack XCTest链接器错误

来自分类Dev

使用组策略编辑器时出现“名称空间已定义”错误

来自分类Dev

使用寄存器类型Ninject到Unity导致单实例控制器错误