不会为 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.

本质上,这是因为模板代码仅在为某种类型实例化模板时才编译。