Змінюй хід війни! Допомагай ЗСУ!

Ошибки линковки, прошу помощи

🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
Статус: Offline
Реєстрація: 23.09.2008
Повідом.: 851
  • 🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #1
Ошибки линковки, прошу помощи

Ситуация следующая - записался на online курсы INTUIT по теме "Программирование в visual studio". В последней лекции есть пример - построение интерполяционного полинома по методу Лагранжа. Приложение считывает точки и по ним строит полином. Для операций с полиномами они выслали готовый .h и .cpp файл, где описан шаблонный класс полиномов. Для этого класса переопределены операторы =, +, -, *, (). Проблема в том, что при использовании этих операторов в программе (программа не моя, тоже оттуда) выскакивают ошибки линковки вида:

error LNK2019: unresolved external symbol

гугл не дал мне нужной инфы, я бьюсь уже второй день, по всей видимости нужно задать какие то настройки проекта либо подключить какие то библиотеки. Если у кого есть чуть свободного времени, просто запустите у себя проект, может у меня просто студия не хавает или линкер переустановить нужно (я пока не знаю как это сделать).

Проект во вложенном файле, он недособран т.е. компилится, но не запускается, заранее спасибо всем, кто откликнется.
 
  • 🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #2
Какой именно внешний символ не виден? Он должен писать что-то вроде такого: Unresolved external symbol: имя_символа
PS: Судя по namespace вы работаете в VC2005, у меня его нет, поэтому не могу сама посмотреть, напишите:(

Еше: Если при компиляции этого проекта у вас генерируется файл GP.lib - вы должны его включить в список используемых внешних библиотек вашего проекта, на вкладке "Linker".
 
  • 🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #3
Ругается на операторы

error LNK2019: unresolved external symbol "public: class Polinom<double> __thiscall Polinom<double>::operator+(class Polinom<double>)" (??H?$Polinom*N**QAE?AV0*V0**Z) referenced in function "public: bool __thiscall CGPDoc::BuildPolinom(void)" (?BuildPolinom*CGPDoc**QAE_NXZ)

Таких четыре ошибки, отличаются операторами: +, -, =, *. Оператор () почему то проходит.

Да, как проверить должен ли генерироваться GP.lib или нет и где он добавляется.
 
  • 🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #4
Да, скорее всего придётся либо так как вы предлагаете, либо заменить их функциями, благо используются они нечасто.
 
  • 🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #5
Вот лажа, сообщение смылось...:(
 
  • 🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #6
та что то не так с форумом, у меня на ветке "работа " up не проходит, а добавляется к старому сообщению, добавленному вчера утром ))) и топик висит где висел.
 
  • 🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #7
error LNK2019: unresolved external symbol "public: class Polinom<double> __thiscall Polinom<double>::operator+(class Polinom<double>)" (??H?$Polinom*N**QAE?AV0*V0**Z) referenced in function "public: bool __thiscall CGPDoc::BuildPolinom(void)" (?BuildPolinom*CGPDoc**QAE_NXZ)
Вот, похоже, что у вас где-от в секции public объявлены не только методы класса Polinom, но и сам класс Polinom тоже public.
Да, как проверить должен ли генерироваться GP.lib или нет и где он добавляется.
Не, это он сам при компиляции генерит файл библиотеки, но в вашем случае он таки и не должен создаваться - вы же не в виде dll этот модуль делаете.
PS: Просто у меня привычка как что - сразу проверять, подключены ли в проект файлы .lib - я часто с dll-библиотеками работаю.
 
  • 🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #8
Нет, класс Polinom - чистый класс, не наследованный, создан с нуля. В нём по сути элемент типа vector и эти операторы, всё public. Просто какой-то он сложный - сам шаблонный, vector сам по себе шаблонный и операторы тоже.

Вот текст класса

#include <vector>
using namespace std;
template <class A> class Polinom
{
public:
vector<A> Pol; //a0 + a1*x + a2*x^2 + ... + an*x^n
public:
Polinom(){Pol.resize(1); Pol[0] = 0;}
Polinom(A a){Pol.resize(1); Pol[0] = a;}
Polinom(int n, A *koef){Pol.resize(n); for(int i = 0; i < n; i++) Pol = koef;}
Polinom(const Polinom& initPol){Pol = initPol.Pol;}
Polinom<A> operator - ();
Polinom<A> operator + (Polinom<A>);
Polinom<A> operator - (Polinom<A>);
Polinom<A> operator * (Polinom<A>);
Polinom<A> operator = (Polinom<A>);
bool operator == (Polinom<A>);
A operator () (A arg);
};

Учитывая, что файл скачан с сайта INTUIT вероятно он должен работать.

Да попробовал поменять операторы на plus minus, не прокатило, выдал 60 ошибок, просто поменял , скажем, "+" на "plus".
 
  • 🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #9
Попробуйте убрать вторую декларацию паблик:незнаю:
PS: А может как раз нерабочий софт, отлаженный сторонним программистом входит в процесс дистанционного обучения в intuit.ru? :D
PSPS: Заглянет сюда Sergeime - он точно знает, подскажет.
 
  • 🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #10
А может как раз нерабочий софт, отлаженный сторонним программистом входит в процесс дистанционного обучения в intuit.ru?

Мелкие подвохи у них встречались и раньше, но там как то быстрее справлялся
 
  • 🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #11
По мере роста уровня растут и сложности:)
 
  • 🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #12
Ошибка в линковке из-за того, что реализуя шаблонные методы в cpp их нужно либо явно экспортировать через ключевое слово export, либо реализовывать их в хидере или отдельном .inl файле, например так сделан стл.
Исправленный проект в аттаче, проверил, как минимум все собирается, работоспособность не проверял :)
 
  • 🟡 10:00 Відбій тривоги в Харківський район.Зверніть увагу, тривога ще триває у:- Харківський район#Харківський_район
  • #13
Да, всё оказалось просто, но на поверхности не лежит.
Огромное спасибо Blackdealer за помощь и Tempory Mea за участие.
 
Назад
Зверху Знизу