好的,所以我正在研究C++项目,但我只是想不出如何缓解此链接器错误。在下面:



如果有人可以帮助我分解并转换为我的语言,Visual Studio 2010所说的话将是很棒的(我真的很想在阅读输出方面变得更好)。我一直在阅读有关此特定错误的信息,但我仍然不明白为什么将其应用于我的代码。

编辑:binarySearch方法正在OrderedList.cpp文件中实现。我还在包含主文件的文件中使用#include“OrderedList.cpp”语句。

有问题的两个功能:

插入原型(prototype):

virtual void insert ( const DataType &newDataItem ) throw ( logic_error );

插:
template <typename DataType, typename KeyType>
void OrderedList<DataType, KeyType>::insert(const DataType &newDataItem)
throw (logic_error ) {
int index = 0;
if (size == maxSize) {
    throw logic_error("List is full.");
}
else {
    KeyType searchKey = newDataItem.getKey();
    if (binarySearch(searchKey, index)) {
        cursor = index;
        dataItems[cursor] = newDataItem;
    }
    else {
        cursor = index;
        insert(newDataItem);
    }
}
}

二进制搜索原型(prototype):
bool binarySearch ( KeyType searchKey, int &index );

二进制搜索:
template < typename DataType, typename KeyType >
bool binarySearch (KeyType searchKey, int &index ) {
int low  = 0;        // Low index of current search range
int high = size - 1;    // High index of current search range
bool result;            // Result returned

while ( low <= high )
{
    index = ( low + high ) / 2;               // Compute midpoint
    if ( searchKey < dataItems[index].getKey() )
       high = index - 1;                      // Search lower half
    else if ( searchKey > dataItems[index].getKey() )
       low = index + 1;                       // Search upper half
    else
       break;                                 // searchKey found
}

if ( low <= high )
   result = true;       // searchKey found
else
{
   index = high;        // searchKey not found, adjust index
   result = false;
}

return result;
}

此外,Record类:
class Record
{
public:
Record () { key = char(0); }
void setKey(char newKey) { key = newKey; }
char getKey() const { return key; }

private:
char key;

};

最佳答案

该行是否可能:

template < typename DataType, typename KeyType >
bool binarySearch (KeyType searchKey, int &index )

在您的cpp文件中,而您只是忘记将其实现为:
template < typename DataType, typename KeyType >
bool OrderedList<DataType, KeyType>::binarySearch(KeyType searchKey, int &index)

然后binarySearch只是一个全局函数,而不是OrderedList和链接器中试图查找OrderedList<DataType, KeyType>::binarySearch的函数,因此不将其视为指定函数?

09-08 11:20