簡體   English   中英

鏈接器錯誤LNK2019

[英]Linker Error LNK2019

我一直在玩模板功能,並做了一個小的記錄器程序。 我一直在嘗試將其拆分為頭文件/源文件,但我不斷收到鏈接器錯誤。 我知道這很簡單,但我無法弄明白。

此外,我在記錄器標題中有一些說服變量,那些將是“適當”的地方? (logStart,logEnd等)

以下所有代碼。

#ifndef __moot_logger_hpp__
#define __moot_logger_hpp__


#include <iostream>
#include <fstream>
#include <string>

using std::ios;

namespace Moot
{
    struct Logger
    {
        Logger();
        ~Logger() {}


        template <class T>      
        void saveToFile(T type);

        template <typename T>
        Logger& operator<< (T type);


        /*
        Logger& operator<< (std::wstring wideStr)
        {
            saveToFile(Moot::convertWstringToString(wideStr));
            return *this;
        }
        */
    };


    /*
    namespace {
        Logger logStart;
        Logger& lStart = logStart;

        const char  logEnd = '\n';
        const char& lEnd   = logEnd;

        const char  logSpace = ' ';
        const char& lSpace   = logSpace;
    }
    */

}


#endif

資源

#include <Moot/logger.hpp>

Moot::Logger::Logger()
{
    std::ofstream logfile;
    logfile.open ("logfile.txt", ios::trunc);
    logfile << "LogFile - most recent at the bottom\n";
    logfile << "-----------------------------------\n \n";
    logfile.close();
}


template <typename T>
void Moot::Logger::saveToFile(T type)
{
    std::ofstream logfile;
    logfile.open ("logfile.txt", ios::in | ios::app);
    logfile << type;
    logfile.close();
}


template <typename T>
Moot::Logger& Moot::Logger::operator<< (T type) 
{
    saveToFile(type);
    return *this;
}


/*
Logger::Logger& operator<< (std::wstring wideStr)
{
    saveToFile(Moot::convertWstringToString(wideStr));
    return *this;
}
*/

主要

#include <Moot/logger.hpp>
#include <iostream>

int main()
{
    std::cout << "hello" << std::endl;

    Moot::Logger() << 12;
    //Moot::lStart.saveToFile(23);
    //Moot::lStart.operator << 13;

    return 0;
};

您將要閱讀C ++ FAQ Lite問題, “為什么我不能將模板類的定義與其聲明分開並將其放在.cpp文件中?”

實際上,您需要在頭文件中定義函數和類模板,而不是在.cpp文件中。

如果你想要從模板類的聲明中划分除定義而不是使用hpp或tpp將文件移動到單獨的文件(tpp並不總是由文本編輯器正確處理)擴展並在聲明文件的末尾添加定義文件的include指令

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM