已解决:我是个白痴,并在头文件的底部包含头文件,而不是实现文件。
这个项目适用于我的C ++课程中的任务,所以我们非常感谢任何指导。我知道模板类会导致编译器出现问题,所以你必须做一些特殊的事情才能让它们读出来。我的教授为我们提供了修复'这个。我跟踪了所有这些,但我仍然得到一堆未解决的令牌错误。
我得到的错误:
LNK2028,LNK2019,LNK1120(每个的倍数)
标题文件:
#include <iostream>
namespace cs_pairs
{
template <class T>
class orderedPair
{
public:
static const int DEFAULT_VALUE;
typedef std::size_t size_type;
typedef T value_type;
orderedPair(value_type newFirst = DEFAULT_VALUE, value_type newSecond = DEFAULT_VALUE);
void setFirst(value_type newFirst);
void setSecond(value_type newSecond);
value_type getFirst();
value_type getSecond();
orderedPair operator+(const orderedPair& right);
bool operator<(const orderedPair& right);
void print();
class DuplicateMemberError {};
private:
value_type first;
value_type second;
};
template <class T>
const int orderedPair<T>::DEFAULT_VALUE = int();
#include "orderedPair.h"
}
实施档案:
#include <iostream>
#include "orderedPair.h"
using namespace std;
namespace cs_pairs
{
template <class T>
orderedPair<T>::orderedPair(value_type newFirst = DEFAULT_VALUE, value_type newSecond = DEFAULT_VALUE)
{
setFirst(newFirst);
setSecond(newSecond);
}
template <class T>
void orderedPair<T>::setFirst(value_type newFirst)
{
if statement to throw an exception if precondition not met goes here.
if (first == second)
{
throw DuplicateMemberError e;
}
first = newFirst;
}
template <class T>
void orderedPair<T>::setSecond(value_type newSecond)
{
if statement to throw an exception if precondition not met goes here.
if (first == second)
{
throw DuplicateMemberError e;
}
second = newSecond;
}
template <class T>
typename orderedPair<T>::value_type orderedPair<T>::getFirst()
{
return first;
}
template <class T>
typename orderedPair<T>::value_type orderedPair<T>::getSecond()
{
return second;
}
template <class T>
orderedPair<T> orderedPair<T>::operator+(const orderedPair<T>& right)
{
return orderedPair(first + right.first, second + right.second);
}
template <class T>
bool orderedPair<T>::operator<(const orderedPair<T>& right)
{
return first + second < right.first + right.second;
}
template <class T>
void orderedPair<T>::print()
{
cout << "(" << first << ", " << second << ")";
}
}
答案 0 :(得分:0)
删除&#39; #include orderedPair.h&#39;从你的标题。您不希望任何头文件包含在内。
您可能已经包含了lan实现文件,在这种情况下,它是正确的。