不会为 C++ 创建 class 模板
Will not create a class template for c++
我正在尝试弄清楚如何将 classes 与 class 模板一起使用,但我收到以下错误:
错误 1 error LNK2019: 未解析的外部符号 "public: __thiscall AdtBag::AdtBag(void)" (??0?$AdtBag@H@@QAE@XZ) 在函数 _main C:\Users\User\Documents\Visual Studio 2013\Projects\ADTBagAddition\ADTBagAddition\Source 中引用.obj ADTBagAddition
错误 2 error LNK2019: 未解析的外部符号 "public: __thiscall AdtBag::~AdtBag(void)" (??1?$AdtBag@H@@QAE@XZ) 在函数 _main C:\Users\User\Documents\Visual Studio 2013\Projects\ADTBagAddition\ADTBagAddition\Source 中引用.obj ADTBagAddition
错误3 error LNK2019: 未解析的外部符号"public: void __thiscall AdtBag::store_in_bag(int)" (?store_in_bag@?$AdtBag@H@@QAEXH@Z) 在函数_main C:\Users\User\Documents\Visual Studio 2013\Projects\ADTBagAddition\ADTBagAddition\Source.obj ADTBagAddition
错误4 error LNK2019: 未解析的外部符号"public: int __thiscall AdtBag::whats_in_bag(void)" (?whats_in_bag@?$AdtBag@H@@QAEHXZ) 在函数_main C:\Users\User\Documents\Visual Studio 2013\Projects\ADTBagAddition\ADTBagAddition\Source.obj ADTBagAddition
错误 5 error LNK1120: 4 unresolved externals C:\Users\User\Documents\Visual Studio 2013\Projects\ADTBagAddition\Debug\ADTBagAddition.exe ADTBagAddition
这是我的代码:
source.cpp
#include <iostream>
#include "AdtBag.h"
using namespace std;
int main () {
AdtBag<int> BagInt;
int a = 78;
cout << "Int Bag Contains: " << endl;
BagInt.store_in_bag ( a );
cout << BagInt.whats_in_bag () << endl;
return 0;
}
AdtBag.h
#ifndef __ADTBAG__
#define __ADTBAG__
template<class ItemType>
class AdtBag {
private:
ItemType in_bag;
public:
AdtBag<ItemType> ();
~AdtBag<ItemType> ();
void store_in_bag ( ItemType into_bag );
ItemType whats_in_bag ();
};
#endif
AdtBag.cpp
#include "AdtBag.h"
template <class ItemType>
AdtBag<ItemType>::AdtBag () {
}
template <class ItemType>
AdtBag<ItemType>::~AdtBag () {
}
template<class ItemType>
void AdtBag<ItemType>::store_in_bag ( ItemType into_bag ) {
in_bag = into_bag;
}
template<class ItemType>
ItemType AdtBag<ItemType>::whats_in_bag () {
return in_bag;
}
为什么会产生错误消息?如果重要的话,我正在使用 Visual Studio 2013。我以为我做的一切都正确,但我想不是。有什么建议吗?
松散地说,所有模板 class 代码必须在 header.
本质上,这是因为模板代码仅在为某种类型实例化模板时才编译。
我正在尝试弄清楚如何将 classes 与 class 模板一起使用,但我收到以下错误:
错误 1 error LNK2019: 未解析的外部符号 "public: __thiscall AdtBag::AdtBag(void)" (??0?$AdtBag@H@@QAE@XZ) 在函数 _main C:\Users\User\Documents\Visual Studio 2013\Projects\ADTBagAddition\ADTBagAddition\Source 中引用.obj ADTBagAddition
错误 2 error LNK2019: 未解析的外部符号 "public: __thiscall AdtBag::~AdtBag(void)" (??1?$AdtBag@H@@QAE@XZ) 在函数 _main C:\Users\User\Documents\Visual Studio 2013\Projects\ADTBagAddition\ADTBagAddition\Source 中引用.obj ADTBagAddition
错误3 error LNK2019: 未解析的外部符号"public: void __thiscall AdtBag::store_in_bag(int)" (?store_in_bag@?$AdtBag@H@@QAEXH@Z) 在函数_main C:\Users\User\Documents\Visual Studio 2013\Projects\ADTBagAddition\ADTBagAddition\Source.obj ADTBagAddition
错误4 error LNK2019: 未解析的外部符号"public: int __thiscall AdtBag::whats_in_bag(void)" (?whats_in_bag@?$AdtBag@H@@QAEHXZ) 在函数_main C:\Users\User\Documents\Visual Studio 2013\Projects\ADTBagAddition\ADTBagAddition\Source.obj ADTBagAddition
错误 5 error LNK1120: 4 unresolved externals C:\Users\User\Documents\Visual Studio 2013\Projects\ADTBagAddition\Debug\ADTBagAddition.exe ADTBagAddition
这是我的代码:
source.cpp
#include <iostream>
#include "AdtBag.h"
using namespace std;
int main () {
AdtBag<int> BagInt;
int a = 78;
cout << "Int Bag Contains: " << endl;
BagInt.store_in_bag ( a );
cout << BagInt.whats_in_bag () << endl;
return 0;
}
AdtBag.h
#ifndef __ADTBAG__
#define __ADTBAG__
template<class ItemType>
class AdtBag {
private:
ItemType in_bag;
public:
AdtBag<ItemType> ();
~AdtBag<ItemType> ();
void store_in_bag ( ItemType into_bag );
ItemType whats_in_bag ();
};
#endif
AdtBag.cpp
#include "AdtBag.h"
template <class ItemType>
AdtBag<ItemType>::AdtBag () {
}
template <class ItemType>
AdtBag<ItemType>::~AdtBag () {
}
template<class ItemType>
void AdtBag<ItemType>::store_in_bag ( ItemType into_bag ) {
in_bag = into_bag;
}
template<class ItemType>
ItemType AdtBag<ItemType>::whats_in_bag () {
return in_bag;
}
为什么会产生错误消息?如果重要的话,我正在使用 Visual Studio 2013。我以为我做的一切都正确,但我想不是。有什么建议吗?
松散地说,所有模板 class 代码必须在 header.
本质上,这是因为模板代码仅在为某种类型实例化模板时才编译。