Несколько файлов в Dev-C ++, ошибка компоновщика. Шаблоны - PullRequest
0 голосов
/ 19 декабря 2009

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

Я также не уверен, какая информация является слишком большой информацией, поэтому я, вероятно, не дам достаточно информации, так что извините за это тоже - просто спросите.

Я начал писать класс в main.cpp, и он стал большим, поэтому я решил перенести его в другой исходный файл. Я не слишком уверен в том, как это сделать, и не могу ничего понять, чтобы помочь решить эту конкретную проблему с интернет-ресурсов (отсюда и вопрос).

Я начал с определения класса, включающего все определения функций над основной функцией программы. Это работает нормально. Затем я разделил это на две отдельные части. Объявление класса (я думаю, что это правильный термин) над основной функцией и определения функций под основной функцией.

Это также отлично работает. Я продолжил вырезать объявление класса в заголовочный файл. Этот заголовочный файл имеет форму

#ifndef INC_MATRIX_H
#define INC_MATRIX_H
class matrix{
//ETC
};
#endif

То, что я где-то прочитал, полезно, но я не совсем уверен, почему, я думаю, что это остановит переопределение функций, если заголовок включен несколько раз.

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

Следующим шагом, который я предпринял, было вырезать определения функций в отдельный отдельный файл .cpp. Единственное добавление, которое было сделано к этому файлу .cpp, было то, что некоторые дополнительные включения должны были быть добавлены к вершине (особенно iostream и cstdlib). ТАКЖЕ был включен файл matrix.h.

В этой конфигурации Dev-C ++ вызывает ошибки компоновщика, когда я пытаюсь скомпилировать и запустить код. В частности, они имеют форму

[Ошибка компоновщика] неопределенная ссылка на matrix <bool>::matrix(int, int)

И код не запускается (очевидно). Как я могу это исправить? Заранее спасибо.

Редактировать: Обнаружено, что это связано с тем, что это шаблонный класс и в области действия файла matrix.cpp шаблон не представлен в типе bool. Теперь я хочу выяснить, как это исправить, не добавляя много строк кода, чтобы по отдельности заставить каждую функцию принимать каждый данный тип. О, и я ценю, что могу определить функции в шапке. Но я думал, что мы не должны были этого делать? Я думал, что идея заключается в том, что вы просто включаете декларацию.

Ответы [ 2 ]

1 голос
/ 19 декабря 2009

Ошибка предполагает, что ваш матричный класс является шаблонным классом. Это? Возможно, размещение кода поможет.

Если является шаблонным классом, то смотрите этот FAQ для описания общей проблемы с разделением шаблонных классов на заголовок / реализацию и решения этой проблемы.

1 голос
/ 19 декабря 2009

Я думаю, вы, вероятно, не добавили matrix.cpp в ваш проект. Он должен создать это для matrix.o и связать его с main.o для создания вашего .exe.

...