当用于声明其他类中的对象时,模板化类链接错误
|
我创建了一个模板化数据类(
CAnyData
,请参阅其头文件副本以供参考),并在另一个类中声明了一些变量(CConstantDataBlock
,请参见其头文件副本供您参考)。如您所见,后一个几乎是一个空类。但是,当我编译项目时,VS2008编译器发出以下链接错误。请帮助我找出我的CConstantDataBlock
和/或CAnyData
是什么问题吗?
1>------ Build started: Project: Tips, Configuration: Debug Win32 ------
1>Compiling...
1>ConstantDataBlock.cpp
1>Linking...
1> Creating library F:\\Tips\\Debug\\Tips.lib and object F:\\Tips\\Debug\\Tips.exp
1>ConstantDataBlock.obj : error LNK2019: unresolved external symbol \"public: __thiscall CAnyData<double>::~CAnyData<double>(void)\" (??1?$CAnyData@N@@QAE@XZ) referenced in function __unwindfunclet$??0CConstantDataBlock@@QAE@XZ$0
1>ConstantDataBlock.obj : error LNK2019: unresolved external symbol \"public: __thiscall CAnyData<int>::~CAnyData<int>(void)\" (??1?$CAnyData@H@@QAE@XZ) referenced in function __unwindfunclet$??0CConstantDataBlock@@QAE@XZ$0
1>ConstantDataBlock.obj : error LNK2019: unresolved external symbol \"public: __thiscall CAnyData<double>::CAnyData<double>(void)\" (??0?$CAnyData@N@@QAE@XZ) referenced in function \"public: __thiscall CConstantDataBlock::CConstantDataBlock(void)\" (??0CConstantDataBlock@@QAE@XZ)
1>ConstantDataBlock.obj : error LNK2019: unresolved external symbol \"public: __thiscall CAnyData<int>::CAnyData<int>(void)\" (??0?$CAnyData@H@@QAE@XZ) referenced in function \"public: __thiscall CConstantDataBlock::CConstantDataBlock(void)\" (??0CConstantDataBlock@@QAE@XZ)
1>F:\\Tips\\Debug\\Tips.exe : fatal error LNK1120: 4 unresolved externals
1>Build log was saved at \"file://f:\\Tips\\Tips\\Debug\\BuildLog.htm\"
1>Tips - 5 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
#pragma once
#include <string>
using namespace std;
template <class T>
class CAnyData
{
public:
CAnyData(void);
CAnyData(int nWordNumber, string sContents, T Type, int nWidth, int nPrecision);
~CAnyData(void);
// Operators
CAnyData( const CAnyData& rhs );
const CAnyData& operator = (const CAnyData& rhs);
// Must define less than relative to name objects.
bool operator<( const CAnyData& AnyData ) const;
// Compares profile\'s of two objects which represent CAnyData
inline bool operator ==(const CAnyData& rhs) const;
// Get properties
inline int WordNumber() const { return m_nWordNumber; }
inline const string& Contents() const { return m_sContents; }
inline const T& DataType() const { return m_Type; }
inline int Width() const { return m_nWidth; }
inline int Precision() const { return m_nPrecision; }
// Set properties
void WordNumber(int nWordNumber) const { m_nWordNumber = nWordNumber; }
void Contents(string sContents) const { m_sContents = sContents; }
void DataType(T Type) const { m_Type = Type; }
void Width(int nWidth) const { m_nWidth = nWidth; }
void Precision(int nPrecision) const { m_nPrecision = nPrecision; }
protected:
void Init(void);
protected:
int m_nWordNumber;
string m_sContents;
T m_Type;
int m_nWidth;
int m_nPrecision;
};
#pragma once
#include \"AnyData.h\"
// Constants block
// This block consists of 64 words to be filled with useful constants.
class CConstantDataBlock
{
public:
CConstantDataBlock(void);
~CConstantDataBlock(void);
protected:
CAnyData<int> m_nEarthEquatorialRadius;
CAnyData<int> m_nNominalSatelliteHeight;
CAnyData<double> m_dEarthCircumference;
CAnyData<double> m_dEarthInverseFlattening;
};
没有找到相关结果
已邀请:
1 个回复
为陡土
的几种方法定义,包括默认构造函数和析构函数。当您在
类中使用它们时,则需要构造函数和析构函数。 由于ѭ0是一个类模板,因此所有定义都应直接写到头文件中(就像您对所有getter和setter所做的一样)。