Вниз  C / C++
- 6.08.2015 / 08:32
DominaN
  Пользователь

DominaN 
Сейчас: Offline
Вы б хоть посмотрели что-там :gg:
- 6.08.2015 / 18:56
Bogdan-G
  Пользователь

Bogdan-G 
Сейчас: Offline
Ксакеп, ну русификация это хлрошо :gg:
- 6.08.2015 / 19:47
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
Bogdan-G, ты просто не видел ошибку, вывод которой составляет 20 Мб.
- 6.08.2015 / 20:15
Naik
  Пользователь

Naik 
Сейчас: Offline
Да, вывод *понятных* ошибок не самая сильная сторона с++ :gg:
- 6.08.2015 / 23:42
Bogdan-G
  Пользователь

Bogdan-G 
Сейчас: Offline
Ксакеп, ну то что она упорота или не совсем ясна это да :gg:
- 14.08.2015 / 20:11
Banschey
  Пользователь

Banschey 
Сейчас: Offline
Доброго времени суток всем, извиняюсь за то что пишу не по теме, может кто посоветовать литературу или примеры физ движка( простого:Солид объекты). За рание спасибо :)
- 15.08.2015 / 07:17
aRiGaTo
  Пользователь

aRiGaTo 
Сейчас: Offline
Banschey, Grant Palmer - Physics for Game Programmers
__________________
 don't tread on me
- 23.09.2015 / 14:26
Naik
  Пользователь

Naik 
Сейчас: Offline
Фигня какая-то это, а не ЯП

list.h
  1. template <typename T>
  2. class List {
  3.  
  4. public:
  5.     List(int i);
  6.  
  7. };

list.cpp
  1. #include "list.h"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. template <typename T>
  7. List<T>::List(int i) {
  8.     cout << "List constructor" << endl;
  9. }

main.cpp
  1. #include <iostream>
  2. #include "util/list.h"
  3.  
  4. using namespace std;
  5.  
  6. int main() {
  7.     List<char> *list = new List<char>(1);
  8.     delete list;
  9.     return 0;
  10. }

При линковке
/main.cpp:7: error: undefined reference to `List<char>::List(int)'

работает только если инклюдить list.cpp

Изменено Naik (23.09 / 14:28) (всего 1 раз)
- 23.09.2015 / 14:58
Freddy
  Пользователь

Freddy 
Сейчас: Offline
Naik, так нельзя делать, потому что компилятор, когда обрабатывает шаблонную функцию, компилирует её для каждого типа данных, а не производит магию вроде "откомпилирую как-то раз, создам некий общий код, а потом конкретный тип в рантайме как-то работать будет". Коряво объяснил, конечно, вот ссылка на нужный абзац в учебнике по C++ Standard Library:
https://books.google.ru/books?...ions.%22&f=false

Сделать можешь так:
  1. #ifndef __LIST_H__
  2. #define __LIST_H__
  3.  
  4. template <typename T>
  5. class List {
  6. public:
  7.     List(int i);
  8. };
  9.  
  10. #include "list.tpp"
  11.  
  12. #endif //__LIST_H__
(Обычно когда такой трюк с шаблонами используют, файл с реализацией называют *.tpp, а не *.cpp)
- 23.09.2015 / 16:47
Naik
  Пользователь

Naik 
Сейчас: Offline
Freddy, ну смысла в этом 0, написал все в хидере, но смысл хидера как бы не в этом :gg: Ну ладно, напишу и забуду про этот с++

Неужели компилятор не может посмотреть использования кода и сам все сгенерировать? Нет же, ему нужен факт, что реализации именно в хидере

Изменено Naik (23.09 / 16:50) (всего 1 раз)
Наверх  Всего сообщений: 2777
Фильтровать сообщения
Поиск по теме
Файлы топика (111)