首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接器误差LNK2019

链接器误差LNK2019
EN

Stack Overflow用户
提问于 2010-09-09 20:28:11
回答 2查看 1.8K关注 0票数 1

我一直在玩模板函数,并做了一个小小的记录器程序。我一直试图将其分解为头/源文件,但是我一直在获取链接器错误。我知道这很简单,但我想不出来。

另外,我在记录器标题中有一些说服vars的地方,在哪里可以找到合适的位置呢?(logStart,logEnd等)

下面所有代码。

报头

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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;
}
*/

代码语言:javascript
复制
#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;
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-09 20:30:21

你会想读C++常见问题解答,“为什么我不能将模板类的定义从声明中分离出来,并将其放入.cpp文件中呢?”

实际上,您需要在头文件中而不是在.cpp文件中定义函数和类模板。

票数 4
EN

Stack Overflow用户

发布于 2010-09-09 20:44:01

如果您希望将定义与模板类的声明分开,而不是将定义移动到带有hpp或tpp的单独文件(tpp并不总是由文本编辑器正确处理)扩展,并在声明文件的末尾添加定义文件的include指令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3680312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档