2015-11-21 3 views
-1

Заданный вопрос сильно отличается от так называемого дубликата сообщения, поскольку у меня есть определенные ошибки, и они просто спрашивают, почему это должно быть в файле .h. У меня уже есть его в файле заголовка и я получаю ошибки ниже.Ошибки шаблона класса

Обновлены файлы, и я до сих пор получаю следующие ошибки.

  • 1 неразрешенных внешних (lab12.exe линия 1)
  • неразрешенный внешний символ "общественного char__thiscall пара :: geetFirst (аннулируются)" (? GetFirst @? $ Пара @ D @@ QAEDXZ) ссылка в function_main (lab12.obj линия 1)

Pair.h

#pragma once 
template <class T> 
class Pair 
{ 

private: 
    T theFirst; 
    T theSecond; 

public: 
    /*Pair(const T& dataOne, const T& dataTwo);*/ 
    Pair(T a, T b) { 
     theFirst = a; 
     theSecond = b; 
    } 
    T getFirst(); 
    T getSecond(); 

}; 

Pair.cpp

#include "stdafx.h" 
#include "Pair.h" 


template<class T> 
T Pair<T>::getFirst() 
{ 
    return theFirst; 
} 

template<class T> 
T Pair<T>::getSecond() 
{ 
    return theSecond; 
} 

main.cpp

#include "stdafx.h" 
#include "Pair.h" 
#include <iostream> 
using namespace std; 

int main() 
{ 
    Pair <char> letters('a', 'd'); 

    cout << letters.getFirst(); 


    cout << endl; 
    system("Pause"); 

    return 0; 
} 
+1

Как дубликат не отвечает на ваш вопрос? Вы должны поместить всю реализацию шаблона в файл заголовка. –

+0

Это также может помочь. http://stackoverflow.com/a/12574417/3747990 – Niall

ответ

1

Вы должны поместить весь код для класса шаблон Пара в файл заголовка.

Кроме того, нет необходимости отделять декларацию метода от определения в заголовке.

«Пара T :: Пара» неверна, потому что вам здесь не нужна T.

+0

Я считаю, что исправил это, но у меня все еще есть аналогичная ошибка, я обновляю код до того, что у меня есть сейчас ... любые идеи? –

+1

Удалите Pair.cpp и поместите определения getFirst и getSecond в файл Pair.h. –

Смежные вопросы