我不知道为什么我在项目中有链接错误。我认为该类的标题和实现代码已正确实现。谢谢您的合作,亲爱的 friend 们。
客体
在C++中实现一个序列化数据类
埃罗斯·曼斯吉奇
错误2错误LNK1120:1未解决的外部C:\ Users ... \ SerializationTest.exe 1 1 SerializationTest
错误1错误LNK2020:无法解析的 token (06000001)
SerializationExtensions ^>::序列化C:\ Users ... \ SerializationTest.obj SerializationTest
这里的代码
文件:SerializationExtensions.h
#ifndef __SERIALIZATION_EXTENSIONS_H__
#define __SERIALIZATION_EXTENSIONS_H__
template<class T>
public ref class SerializationExtensions
{
public:
static System::String^ Serialize(T obj);
static T Deserialize(System::String^ serialized);
};
#endif // __SERIALIZATION_EXTENSIONS_H__
文件:SerializationExtensions.cpp
#include "stdafx.h"
#include "SerializationExtensions.h"
#using <System.Runtime.Serialization.dll>
using namespace System::IO;
using namespace System::Xml;
using namespace System::Runtime::Serialization;
template<class T>
System::String^ SerializationExtensions<T>::Serialize(T obj)
{
DataContractSerializer^ serializer = gcnew DataContractSerializer(obj->GetType());
StringWriter^ writer = gcnew StringWriter();
XmlTextWriter^ stm = gcnew XmlTextWriter(writer);
serializer->WriteObject(stm, obj);
return writer->ToString();
}
template<class T>
T SerializationExtensions<T>::Deserialize(System::String^ serialized)
{
DataContractSerializer^ serializer = gcnew DataContractSerializer(typeof(T));
StringReader^ reader = gcnew StringReader(serialized);
XmlTextReader^ stm = gcnew XmlTextReader(reader);
return (T)serializer->ReadObject(stm);
}
文件:SerializationTest.cpp
// SerializationTest.cpp : main project file.
#include "stdafx.h"
#include "SerializationExtensions.h"
using namespace System::Collections::Generic;
using namespace System;
int main(array<System::String ^> ^args)
{
Dictionary<System::String^, System::Double>^ teste = gcnew Dictionary<System::String^, System::Double>();
teste->Add("Teste1",2);
teste->Add("Teste2",4);
Console::WriteLine(SerializationExtensions<Dictionary<System::String^, System::Double>^>::Serialize(teste));
return 0;
}
最佳答案
模板类需要在 header 中包含它们的定义,因此对于要专用于该类的所有TU都是可见的。
将实现移动到SerializationExtensions.h
。