На данный вопрос уже ответили:
Компилятор будто не видит конструктор с параметрами и деструктор, но все есть. Я не понимаю откуда эта ошибка берется. Объясните пожалуйста!
Код ошибки:
main.o: In function `main':
C:\Users\../main.cpp:14: undefined reference to `ControllerIOFStream<UserAccount>::ControllerIOFStream(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
C:\Users\../main.cpp:14: undefined reference to `ControllerIOFStream<UserAccount>::~ControllerIOFStream()'
collect2.exe: error: ld returned 1 exit status
Создание объекта класса ControllerIOFStream:
MAIN.cpp
ControllerIOFStream<UserAccount> CIOUserAccounts(str);
Класс описан в двух файлах: ControllerIOFStream.h
и ControllerIOFStream.cpp
ControllerIOFStream.h:
/*
* ControllerIOFStream.h
*
* Created on: 12 нояб. 2017 г.
* Author: Дмитрий
*/
#include <string>
#include <list>
#include <fstream>
using namespace std;
template <class T>
class ControllerIOFStream {
private:
string path;
public:
ControllerIOFStream();
ControllerIOFStream(string);
~ControllerIOFStream();
list<T> readFile(list<T>);
list<T> writeFile(list<T>);
};
ControllerIOFStream.cpp:
/*
* ControllerIOFStream.cpp
*
* Created on: 12 нояб. 2017 г.
* Author: Дмитрий
*/
#include "ControllerIOFStream.h"
template<class T>
ControllerIOFStream<T>::ControllerIOFStream():
path(""){
}
template<class T>
ControllerIOFStream<T>::ControllerIOFStream(string path) :
path(path) {
}
template<class T>
ControllerIOFStream<T>::~ControllerIOFStream() {
}
template<class T>
list<T> ControllerIOFStream<T>::readFile(list<T> List){
ifstream inputStream(path);
size_t size;
T buf;
inputStream>>size;
for(size_t i=0;i<size;i++){
inputStream>>buf;
List.push_back(buf);
}
inputStream.close();
return List;
}
template<class T>
list<T> ControllerIOFStream<T>::writeFile(list<T> List){
ofstream outputStream(path);
outputStream<<List.size()<<"\n";
//for????????????????????????????????????????????????????????????
// for(list<T>::iterator it=List.begin();it<List.end();++it){
// outputStream<<*it<<"\n";
// }
outputStream.close();
return List;
}
Есть еще вопрос: почему не работает код в методе writeFile(list List)?
Сам код под кучей знаков вопроса.
В очередной раз те же грабли...
Нельзя реализацию шаблона выносить в отдельный .cpp-файл! Откуда при компиляции этого (ControllerIOFStream.cpp
) файла знать, что (с каким параметром шаблона) будет инстанцироваться в другом файле?
А в этом другом файле (main.cpp
) - откуда знать, как инстанцировать шаблон, если нет доступа к коду реализации?
То, что у вас в ControllerIOFStream.cpp
- должно быть перенесено в .h-файл. Или нужно в нем явно инстанцировать ControllerIOFStream<UserAccount>
...
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не можете подсказать, какой компилятор для С++ лучше? Изучил основы С++ и хочу попрактиваться
Добрый вечерУ меня имеется вот такая задачка: Создайте вектор, хранящий десять строковых значений " zero " , " one " , "
Недавно узнал, что /// в Visual Studio используется для создания Xml документацииТакже выяснил можно просматривать описание функций с помощью тега...
Разбиение строки Str на отдельные блоки длиной по 4 символа пробеламиСтрока Str вводится с клавиатуры