重複の可能性:
テンプレートをヘッダー ファイルにしか実装できないのはなぜですか?
テンプレート クラス - 未解決の外部シンボル
これがリンクエラーを生成している理由の手がかりではありません。手がかりはありますか?
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 が問題を引き起こしているだけですか? また、ここで私のコードを批判したい場合は、先に進んでください。ただし、「うわー、これはこれまでで最もくだらないコードです。代わりに私の素晴らしいものを使用してください」という行に沿っている場合は、どんなに正しくても無視される可能性があります。あなたは。