当前位置: 首页 > 知识库问答 >
问题:

unitest文件上未解析的外部符号(visual studio)

全鸿晖
2023-03-14

我正在用c和visual studio进行我的第一次测试,我不知道为什么,当程序中没有出现“未解决的外部符号”时,我会遇到一个问题。

错误97错误LNK2001:未解析的外部符号"public:静态类会话*__cdecl会话::实例(无效)"(?Instance@Session@@SAPAV1@XZ)(...)\MyTest\Messages.objMyTest

错误98错误LNK2001:未解析的外部符号“public:char*_thiscall Config::getLanguage(void)”(?getLanguage@Config@@QAEPADXZ)(…)\MyTest\消息。obj-MyTest

错误99错误LNK2001:未解析的外部符号"class wxString StringTranslate"(? StringTranslate@@3VwxString@@A)(...)\MyTest\Messages.objMyTest

错误100错误LNK2001:未解析的外部符号“public:void _thiscall Session::addMSG(class std::shared_ptr)”(?addMSG@Session@@QAEXV$分享_ptr@VMessage@@@std@@@Z)(…)\语音翻译工具\MyTest\Messages。obj-MyTest

错误101错误LNK2001:未解析的外部符号"public: char*__thiscallConfig::getNick(val)"(?getNick@Config@@QAEPADXZ)(...)语音翻译工具\MyTest\Messages.objMyTest

错误102错误LNK2001:未解析的外部符号“public:char*_thiscall Config::getServerAddress(void)”(?getServerAddress@Config@@QAEPADXZ)(…)MyTest\消息。obj MyTest错误103错误LNK1120:6个未解析的外部

测试文件

#include "stdafx.h"
#include "CppUnitTest.h" 
#include <wx/wx.h>
#include <wx/stattext.h> 
#include "data/Session.h"

#include "lib/ClientTS.cpp"
using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace MessageTXT    
{
    TEST_CLASS(UnitTest1)
    {

    public:
        TEST_METHOD(TEST_MESSAGE_SEND)
        {
            ClientTS *clientts = new ClientTS;
            wxString sr = "enviar_mensaje";
            clientts->sendMessage(&sr);
            clientts->disconnect();

        }
    };
}

客户。H

#pragma once

#ifdef __BORLANDC__
#pragma hdrstop
#endif

#ifndef WX_PRECOMP
#include <wx/wx.h>
#include <wx/frame.h>
#else
#include <wx/wxprec.h>
#endif

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

#include "EventType.h" 

#include <wx/sizer.h>
#include <wx/wx.h>
#include <wx/timer.h>
#include <wx/stattext.h>
#include <wx/richtext/richtextctrl.h>
#include <wx/textctrl.h>
#include <wx/button.h>
#include <wx/grid.h>
#include "../gui/NationList.h"
#include "../gui/NationInfo.h" 
#include "../ArchiveLog.h"

#include "../GlobalVariables.h"
#include "../translateController/translateController.h"
#include "../translateController/translateVariable.h"

#include <list>
#include <functional> 

#define MENU_ESCI 1800
#define MENU_OPZIONI 1801
#define MENU_SPEECH 1802


typedef std::function<void()> cbClientTsFrm;


class ClientTS  {
public:
    static Session* session;
    static ConfigPTR config;
    static bool flagSave;
    static char LANG_MSG_SRC[500];
    static char MSG_SRC[500];
    static cbClientTsFrm notifyMSGcb;
    //static ISoundEngine* engine;              //Audio Engine to record sound
    static IAudioRecorder* recorder;            //Flow of audio daa
    //static uint64 scHandlerID;

    static char identity[IDENTITY_BUFSIZE];

    /* Create struct for callback function pointers */
    static struct ClientUIFunctions funcs;
public:
    ClientTS(){
        session = Session::Instance();
        config = session->getConfig();
    }

    virtual ~ClientTS(){}

    static void sendMessage(wxString *msgToSend);

    static void disconnect();
    static char* getLANG_MSG_SRC(){ return LANG_MSG_SRC; }

    static char* getMSG_SRC(){ return MSG_SRC; }
    static IAudioRecorder* getIAudioRecorder(){ return recorder; }

    static bool getFlagSave(){ return flagSave; }

    static void setFlagSave(bool flg){ flagSave = flg; }
    template <typename Observer>
    static void setCBClientTSMSG(Observer && fn){ notifyMSGcb = std::forward<Observer>(fn); }

    static void speak(char *LANG, char*MSG);
    static void Print(char*word);
    static size_t read_callback(static void *ptr, size_t size, size_t nmemb, static void *userp);
    static void writeWaveFile(const char* filename, SAudioStreamFormat format, static void* data);
    static void SetupColor(COLORE *c);
    static void onConnectStatusChangeEvent(uint64 serverConnectionHandlerID, int newStatus, unsigned int errorNumber);
    static void onNewChannelEvent(uint64 serverConnectionHandlerID, uint64 channelID, uint64 channelParentID);
    static void onNewChannelCreatedEvent(uint64 serverConnectionHandlerID, uint64 channelID, uint64 channelParentID, anyID invokerID, const char* invokerName, const char* invokerUniqueIdentifier);
    static void onDelChannelEvent(uint64 serverConnectionHandlerID, uint64 channelID, anyID invokerID, const char* invokerName, const char* invokerUniqueIdentifier);
    static void onClientMoveEvent(uint64 serverConnectionHandlerID, anyID clientID, uint64 oldChannelID, uint64 newChannelID, int visibility, const char* moveMessage);
    static void onClientMoveSubscriptionEvent(uint64 serverConnectionHandlerID, anyID clientID, uint64 oldChannelID, uint64 newChannelID, int visibility);
    static void onClientMoveTimeoutEvent(uint64 serverConnectionHandlerID, anyID clientID, uint64 oldChannelID, uint64 newChannelID, int visibility, const char* timeoutMessage);
    static void onTalkStatusChangeEvent(uint64 serverConnectionHandlerID, int status, int isReceivedWhisper, anyID clientID);
    static void onIgnoredWhisperEvent(uint64 serverConnectionHandlerID, anyID clientID);
    static void onServerErrorEvent(uint64 serverConnectionHandlerID, const char* errorMessage, unsigned int error, const char* returnCode, const char* extraMessage);
    static void onUserLoggingMessageEvent(const char* logMessage, int logLevel, const char* logChannel, uint64 logID, const char* logTime, const char* completeLogString);
    static void onCustomPacketEncryptEvent(char** dataToSend, unsigned int* sizeOfData);
    static void onCustomPacketDecryptEvent(char** dataReceived, unsigned int* dataReceivedSize);
    static void onEditMixedPlaybackVoiceDataEvent(uint64 serverConnectionHandlerID, short* samples, int sampleCount, int channels, const unsigned int* channelSpeakerArray, unsigned int* channelFillMask);
    static void showChannels(uint64 serverConnectionHandlerID);
    static void showChannelClients(uint64 serverConnectionHandlerID, uint64 channelID);
    static void onTextMessageEvent(uint64 serverConnectionHandlerID, anyID targetMode, anyID toID, anyID fromID, const char* fromName, const char* fromUniqueIdentifier, const char* message);
    static void showClients(uint64 serverConnectionHandlerID);
    static void createChannel(uint64 serverConnectionHandlerID, const char *name);
    static void deleteChannel(uint64 serverConnectionHandlerID);
    static void renameChannel(uint64 serverConnectionHandlerID);
    static void switchChannel(uint64 serverConnectionHandlerID);
    static void toggleVAD(uint64 serverConnectionHandlerID);
    static void setVadLevel(uint64 serverConnectionHandlerID);
    static void requestWhisperList(uint64 serverConnectionHandlerID);
    static void requestClearWhisperList(uint64 serverConnectionHandlerID);
    static void toggleRecordSound(uint64 serverConnectionHandlerID);
    static int readIdentity(char* identity);
    static int writeIdentity(const char* identity);
    static uint64  enterChannelID();
    static void createDefaultChannelName(char *name);
    static void enterName(char *name); 
    static void emptyInputBuffer();

    static DWORD WINAPI TTS_THREAD(LPVOID lpParameter);
    static DWORD WINAPI CTRL_STT(LPVOID lpParameter);
    static DWORD WINAPI ClientStart(LPVOID lpParameter);
    static DWORD WINAPI STT_THREAD(LPVOID lpParameter);
};

共有2个答案

韶兴德
2023-03-14

消息指出未解析的外部符号。

这意味着您的代码在语法上是正确的,但在链接所有代码时,并不能找到您引用的所有外部符号(classSession和classConfig成员函数)。obj和。lib文件放在一起。

这意味着您缺少依赖项:项目中缺少源文件,或者“更有可能”缺少库文件。

余弘新
2023-03-14

您正在包含一个. cpp文件

#include "lib/ClientTS.cpp"

应该是吧?

#include "lib/ClientTS.h"
 类似资料:
  • 首先,我知道这个问题在这个网站上到处都是,但是我看了几乎所有的问题,似乎找不到问题所在。这是在VS 2012中。谢谢。 这是插座。cpp公司 这是stdafx。h类 这是我的错误消息:

  • 我有一个cpp文件,其中包括: 当尝试运行AcquireCredentialsHandleW时,我得到.. MSDN说它在sspi.h中。

  • 我在我的MFC vtk项目中使用Visual Studio 2008。我收到一个链接错误,如下所示: vtkPBFEAView。obj:警告LNK4217:本地定义的符号?DrawDC@vtkMFCWindow@@QAEXPAVCDC@@@Z(public:void _thiscall vtkMFCWindow::DrawDC(类CDC*))在函数“protected:virtual void _

  • 如果在中发现未解析的外部符号,我必须做什么。库文件。如果我在中发现未解析的外部符号。c或。cpp我能修好它。但当我在里面发现了未解决的外部符号。lib(library)文件如何解决这个问题? 在我的例子中,我发现了如下链接器错误: 关于这一点的任何建议都将是有益的。

  • 我想写一个调用Java方法的C程序。 我试图从C调用Java函数。如本文所述 http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/invocation.html 但我在调试时遇到这个错误,无法处理它。我正在使用Visual studio 2012。这是我的代码C代码。 安装在my comp版本上的Java是C:\Users\

  • 我得到了这个错误,但我不知道如何修复它。 我正在使用Visual Studio 2013。我将解决方案命名为MyProjectTest这是我的测试解决方案的结构: -功能。H -功能。cpp -main.cpp 我是初学者;这是一个简单的程序,运行时没有错误。我在互联网上阅读并对单元测试感兴趣,因此我创建了一个测试项目: 菜单文件→新建→项目...→已安装→模板→Visual C→测试→本地单元测