Шаблонное программирование на C ++ - PullRequest
1 голос
/ 22 сентября 2010

У меня возникают проблемы с программированием с использованием шаблонов на C ++.

Рассмотрим следующие файлы.

C.h

#ifndef _C_H
#define    _C_H

template <class T>
class C {
public:
    C();
    virtual ~C();
}
#endif _C_H

C.cpp

#include "C.h"

template <class T>
C<T>::C() {

}

template <class T>
C<T>::~C() {
}

Я пытаюсь создать экземпляр C в файле с именем main.cpp.

#include "C.h"

int main(int argc, char** argv) {
    C<int> c;
}

Я получаю следующую ошибку.

main.cpp undefined reference to `C<int>::C()'

Я тогда бегу

g++ -o C.o C.pp
g++ -o main.o main.cpp

но получите ошибку

main.cpp: undefined reference to `C<int>::C()'
main.cpp: undefined reference to `C<int>::~C()'

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

Спасибо!

1 Ответ

5 голосов
/ 22 сентября 2010

При использовании шаблонов исходный код должен быть доступен всякий раз, когда создается экземпляр типа, потому что в противном случае компилятор не может проверить, будет ли код шаблона работать для данных типов. Разделение его на файлы .cpp и .h не будет работать, потому что другие файлы .cpp знают только о файле .h.

В основном вы должны поместить все в файл .h или включить дополнительный файл с кодом реализации.

...