0

重複の可能性:
テンプレートをヘッダー ファイルにしか実装できないのはなぜですか?
テンプレート クラス - 未解決の外部シンボル

これがリンクエラーを生成している理由の手がかりではありません。手がかりはありますか?

datastream.h

#ifndef DATASTREAM_H
#define DATASTREAM_H

#include <vector>
#include <iostream>

class idatastream
{

public:
    idatastream();

    template<class T>void write(T data);
    bool SetPosition(int position);

    void print();
private:
    int m_position;
    std::vector<char> m_buffer;
};

#endif DATASTREAM_H

データストリーム.cpp

#include "datastream.h"

    idatastream::idatastream()
    {
        m_position = 0;
    }

    template<class T>
    void idatastream::write(T data)
    {
        char * getPtr = (char *)&data
        int index = 0;
        if(m_buffer.size() < m_position)
        {
            resize(m_position);
            for(int i = m_position; i < m_position + sizeof(T); i++)
            {
                m_buffer.push_back(getPtr[index]);
                index++;
                m_position++;
            }
        }
        else if(m_buffer.size() == m_position)
        {
            for(int i = m_position; i < m_position + sizeof(T); i++)
            {
                m_buffer.push_back(getPtr[index]);
                index++;
                m_position++;
            }
        }
        else
        {
            for(int i = m_position; i < m_position + sizeof(T); i++)
            {
                m_buffer[m_position] = getPtr[index];
                index++;
                m_position++;
            }
        }

        return;
    }

bool idatastream::SetPosition(int position)
{
    if (position >= 0)
    {
        m_position = position;
        return true;
    }
    else
    {
        return false;
    }
}

void idatastream::print()
{
    for(int i = 0; i < (int) m_buffer.size(); i++)
    {
        std::cout << m_buffer[i] << "   ";
    }
    std::cout << " \n";
}

main.cpp

#include "datastream.h"

int main()
{
    idatastream test;
    int meh = 6;
    int peh = 23;
    int teh = 65;

    test.write<int>(meh);
    test.write<int>(peh);
    test.write<int>(teh);

        test.print();

    return 0;
}

エラー:

error LNK2019: unresolved external symbol "public: void __thiscall idatastream::write<int>(int)" (??$write@H@idatastream@@QAEXH@Z) referenced in function _main

このテンプレート関数を間違って定義するのにばかげた間違いをしただけですか、それとも msvc が問題を引き起こしているだけですか? また、ここで私のコードを批判したい場合は、先に進んでください。ただし、「うわー、これはこれまでで最もくだらないコードです。代わりに私の素晴らしいものを使用してください」という行に沿っている場合は、どんなに正しくても無視される可能性があります。あなたは。

4

0 に答える 0