我想爲模板類分開.h和.cpp。 下面是我在做什麼:C++模板頭cpp分離,包含* .cpp到* .h的解決方案不再工作
- 我寫了直接的.h和.cpp就像沒有模板。因此它創建了一個例外,如Link 2019 Template exception
- 有一些解決方案來處理此How to define template class header and implement it in another cpp。我選擇溶液3
- 根據我加入包括內部只是頭#ENDIF之前*的.cpp該溶液中。(靜止*的.cpp包括* .h)中(以下代碼表示這個步驟)它給
模板已經被定義錯誤。
- 根據研究的擺脫這種錯誤的方式(循環依賴)刪除的#include *從*的.cpp .H但這次
面目全非模板聲明/定義錯誤
發生。我的問題是如果我將* .cpp包含到* .h文件。我們如何才能按預期構建項目?或者這個解決方案是絕對的?
// TestTemp.h
#ifndef _TESTTEMP_H_
#define _TESTTEMP_H_
template<class T>
class TestTemp
{
public:
TestTemp();
void SetValue(T obj_i);
T Getalue();
private:
T m_Obj;
};
#include "TestTemp.cpp"
#endif
// TestTemp.cpp
#include "TestTemp.h"
template <class T>
TestTemp<T>::TestTemp()
{
}
template <class T>
void TestTemp<T>::SetValue(T obj_i)
{
}
template <class T>
T TestTemp<T>::Getalue()
{
return m_Obj;
}
#include "TestTemp.h"
int main()
{
TestTemp<int> a;
a.Getalue();
return 0;
}
您是否確定不要在構建中包含cpp文件?它不應該嘗試編譯它。 – NathanOliver
@NathanOliver我有3個文件顯示在上面,我正在使用Visual Studio爲了建立它們與這些狀態。 – Yunus
這是一篇很糟糕的文章,忘記了你每讀一遍。你不應該這樣做。此代碼(和文章)還存在其他問題,例如使用無效標識符(不能在標識符開頭使用下劃線後跟大寫字母)。 –