Лучший отвечающий
Прошу у вас помощи, так как зашел в тупик... выбивает ошибку LNK2019

Вопрос
-
Уже второй день борюсь с этой ххренью, перелазил кучу сайтов, но так и не понял как исправить ошибку...
Вот полностью вывод ошибки
1>ZbSt.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall St::St(void)" (??0St@@QAE@XZ) в функции "public: void __thiscall ZbSt::SetDannieZborki(void)" (?SetDannieZborki@ZbSt@@QAEXXZ)
1>C:\Users\Danaec\Desktop\lab_3_OOP\Debug\lab_3_OOP.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========вот ссылка на архив с программой: http://files.mail.ru/48E94B2DAFF74805845D8C71C4B98ED5
ну или вот весь код:
// файл main.cpp #include "ZbSt.h" using namespace std; int main() { int fl=0; int kommand; setlocale( LC_ALL,"Russian" ); string mas[]={"Создать зборку статей","Создать статью","Удалить статью", "Вывод статей","Поиск" ,"Упорядочение","Выход"}; ZbSt zbst; while (fl!=10) { for (int i=0;i<7;i++) { cout<<mas[i] <<" - Для выбора введите "<<i<<endl; } cin>>kommand; if (kommand==0) { zbst.SetNazvanieZborki(); } if (kommand==1) { zbst.SetDannieZborki(); } if (kommand==2) { zbst.UdalenieElementov(); } if (kommand==3) { zbst.VivodVsehElementov(); } if (kommand==4) { zbst.Poisk(); } if (kommand==5) { zbst.Uporyadochenie(); } if (kommand==6) { fl=10; } } system("pause"); return 0; }
// file ZbSt.h #pragma once #include "St.h" #include <iostream> #include <vector> #include <map> using namespace std; class ZbSt { public: map<string , vector<St*> > zbst; void SetNazvanieZborki(); void SetDannieZborki(); void UdalenieElementov(); void Poisk(); void VivodVsehElementov(); void Uporyadochenie(); };
//file ZbSt.cpp #include "ZbSt.h" #include <algorithm> void ZbSt :: SetNazvanieZborki() { string Nazv; cout<<"Введите название сборки" <<endl; cin>>Nazv; zbst[Nazv]; } void ZbSt :: SetDannieZborki() { string NazvanieZborki; cout<<"Введите название статьи"<<endl; cin>>NazvanieZborki; for( map<string,vector<St*> >::iterator itr=zbst.begin(); itr!=zbst.end(); ++itr) { if (itr->first==NazvanieZborki) { itr->second.push_back(new St); string nazva; string avtor; string anotac; string B_Pos; cout<<"Введите название статьи"<<endl; cin>>nazva; itr->second.at(itr->second.size()-1)->Set_St(nazva); cout<<"Введите автора"<<endl; cin>>avtor; itr->second.at(itr->second.size()-1)->Set_Avtor(avtor); cout<<"Введите анотации"<<endl; cin>>anotac; itr->second.at(itr->second.size()-1)->Set_Anotac(anotac); cout<<"Введите библиографические посылания"<<endl; cin>>B_Pos; itr->second.at(itr->second.size()-1)->Set_B_Posil(B_Pos); } } } void ZbSt :: UdalenieElementov() { string tema; string avtoor; int fl=-1; string NazvanieSborki; cout<<"Введите название теста"<<endl; cin>>NazvanieSborki; while ((fl!=0)&&fl!=1)&&(fl!=2)) { cout<<"Введите 0 для поиска автору, 1- по теме"<<endl; cin>>fl; } if (fl==1) { cout<<"Введите тему"<<endl; cin>>tema; } if (fl==0) { cout<<"Введите автора"<<endl; cin>>avtoor; } for( map<string,vector<St*> >::iterator itr=zbst.begin(); itr!=zbst.end(); ++itr)//iterator gruppi { if (itr->first==NazvanieSborki) { if (fl==0) { for (unsigned int i = 0; i < itr->second.size(); i++) { if (itr->second[i]->Get_Avtor()==avtoor) { cout<<"Статья автора найдена"<<endl; itr->second.erase(itr->second.begin()+i); cout<<"сатья удалена"<<endl; } } } if (fl==2) { for (unsigned int i = 0; i < itr->second.size(); i++) { if (itr->second[i]->GetTema()==tema) { cout<<"Нашли статью с заданной темой"<<endl; itr->second.erase(itr->second.begin()+i); cout<<"сатья удалена"<<endl; } } } } } } void ZbSt :: Poisk() { string tema; string avtoor; int fl=-1; int fl1=0; while ((fl!=0)&&(fl!=1)&&(fl!=2)) { cout<<"Введите 0 для поиска по автору, 1- по теме вопроса "<<endl; cin>>fl; } if (fl==1) { cout<<"Введите темк вопроса"<<endl; cin>>tema; } if (fl==0) { cout<<"Введите ключевое слово"<<endl; cin>>avtoor; } for( map<string,vector<St*> >::iterator itr=zbst.begin(); itr!=zbst.end(); ++itr)//iterator gruppi { for (unsigned int i = 0; i < itr->second.size(); i++) { if (fl==0) { if (itr->second[i]->Get_Avtor()==avtoor) { cout<<"Статья автора найдена"<<endl; itr->second[i]->Get_All(); } } if (fl==1) { if (itr->second[i]->GetTema()==tema) { cout<<"Нашли статью с заданной темой"<<endl; itr->second[i]->Get_All(); } } } } } void ZbSt :: VivodVsehElementov() { for( map<string,vector<St*> >::iterator itr=zbst.begin(); itr!=zbst.end(); ++itr)//iterator gruppi { cout<<"Название сборки:"<<itr->first<<endl; cout<<"Статьи: "<<endl; for (unsigned int i = 0; i < itr->second.size(); i++)//poka ne konec vectora { itr->second[i]->Get_All(); } } } bool sortByName( St* sort, St* &sort1) { return sort->GetTema()> sort1->GetTema(); } bool sortByAvtor( St* sort, St* &sort1) { return sort->Get_Avtor()> sort1->Get_Avtor(); } void ZbSt :: Uporyadochenie() { int fl=-1; int fl1=0; while ((fl!=0)&&(fl!=1)&&(fl!=2)) { cout<<"Введите 0 для сортировки по названию, 1- по автору"<<endl; cin>>fl; } string NazvanieTesta; cout<<"Введите название теста"<<endl; cin>>NazvanieTesta; for( map<string,vector<St*> >::iterator itr=zbst.begin(); itr!=zbst.end(); ++itr)//iterator gruppi { if (itr->first==NazvanieTesta) { if (fl==0) { std::sort(itr->second.begin(),itr->second.end(),sortByName); } else if (fl==1) { std::sort(itr->second.begin(),itr->second.end(),sortByAvtor); } } } }
//file St.h #pragma once #include "anotacii.h" #include "Dannie.h" #include <iostream> using namespace std; class St : public Anotacii, public Dannie { private: std :: string st; public: St(std:: string, std:: string, std:: string, std:: string, std:: string); St(); ~St(); void Set_St(std:: string ); std :: string Get_St(); void Get_All(); };
//file St.cpp #include "St.h" void St :: Set_St(std:: string stat) { st=stat; } std :: string St :: Get_St() { return (st); } void St :: Get_All() { setlocale( LC_ALL,"Russian" ); std :: cout<<"Название: "; std :: cout<<Get_St()<<std:: endl; std :: cout<<"Тема статьи: "; std:: cout<<GetTema()<<std :: endl; std :: cout<<"Автор: "; std :: cout<<Get_Avtor()<<std ::endl; std :: cout<<"Анотации: "; std :: cout<<Get_Anotac()<<std ::endl; std :: cout<<"Библтографические посылания: "; std:: cout<<Get_B_Posil()<<std :: endl; std :: cout<<std :: endl; }
//file Dannie.h #pragma once #include <iostream> #include <string> class Dannie { private: std:: string avtor; std:: string Tema; public: Dannie(std:: string, std:: string); ~Dannie(); void Set_Avtor(std:: string); std:: string Get_Avtor(); void SetTema(std :: string); std :: string GetTema (); }; //file Dannie.cpp #include "Dannie.h" void Dannie :: Set_Avtor(std::string k) { avtor=k; } std :: string Dannie :: Get_Avtor() { return(avtor); } void Dannie :: SetTema(std :: string Theme ) { Tema=Theme; } std :: string Dannie ::GetTema () { return(Tema); }
//file anotacii.h #pragma once #include <iostream> #include <string> class Anotacii { private: std:: string Anotac; std:: string B_Posil; public: Anotacii(std::string, std:: string); ~Anotacii(); void Set_Anotac(std:: string); std:: string Get_Anotac(); void Set_B_Posil(std:: string); std:: string Get_B_Posil(); }; //file anotacii.cpp #include "anotacii.h" void Anotacii :: Set_Anotac(std::string k) { Anotac=k; } std :: string Anotacii :: Get_Anotac() { return(Anotac); } void Anotacii :: Set_B_Posil(std:: string bp) { B_Posil=bp; } std:: string Anotacii:: Get_B_Posil() { return(B_Posil); }
- Изменено Danaeccc 4 декабря 2013 г. 13:32
4 декабря 2013 г. 13:27
Ответы
-
Здравствуйте.
Вот эта строка в методе ZbSt::SetDannieZborki
itr->second.push_back(new St);
требует наличия конструктора по умолчанию (без параметров) в классе St. У Вас в этом классе он объявлен, поэтому компилятор не выдает ошибок. А вот реализация в файле St.cpp отсутствует. Поэтому линкер и не хочет собирать исполняемый модуль. P.S. Собственно, все это написано в строке описания ошибки, которую Вы привели. Вы читали ее до конца? :)- Изменено kosuke904 5 декабря 2013 г. 8:31
- Предложено в качестве ответа kosuke904 5 декабря 2013 г. 8:42
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 6 декабря 2013 г. 12:45
5 декабря 2013 г. 8:26
Все ответы
-
трудно всматриваться во всё это)) но вы молодец что привели все улики. Может ответ здесь
- Изменено Medet Tleukabiluly 4 декабря 2013 г. 17:29 asd
4 декабря 2013 г. 17:18 -
Здравствуйте.
Вот эта строка в методе ZbSt::SetDannieZborki
itr->second.push_back(new St);
требует наличия конструктора по умолчанию (без параметров) в классе St. У Вас в этом классе он объявлен, поэтому компилятор не выдает ошибок. А вот реализация в файле St.cpp отсутствует. Поэтому линкер и не хочет собирать исполняемый модуль. P.S. Собственно, все это написано в строке описания ошибки, которую Вы привели. Вы читали ее до конца? :)- Изменено kosuke904 5 декабря 2013 г. 8:31
- Предложено в качестве ответа kosuke904 5 декабря 2013 г. 8:42
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 6 декабря 2013 г. 12:45
5 декабря 2013 г. 8:26