none
Прошу у вас помощи, так как зашел в тупик... выбивает ошибку LNK2019 RRS feed

  • Вопрос

  • Уже второй день борюсь с этой ххренью, перелазил кучу сайтов, но так и не понял как исправить ошибку...

    Вот полностью вывод ошибки

    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. Собственно, все это написано в строке описания ошибки, которую Вы привели. Вы читали ее до конца? :)
    5 декабря 2013 г. 8:26

Все ответы

  • трудно всматриваться во всё это)) но вы молодец что привели все улики. Может ответ здесь
    4 декабря 2013 г. 17:18
  • Здравствуйте.

    Вот эта строка в методе ZbSt::SetDannieZborki

    itr->second.push_back(new St);

    требует наличия конструктора по умолчанию (без параметров) в классе St. У Вас в этом классе он объявлен, поэтому компилятор не выдает ошибок. А вот реализация в файле St.cpp отсутствует. Поэтому линкер и не хочет собирать исполняемый модуль.

    P.S. Собственно, все это написано в строке описания ошибки, которую Вы привели. Вы читали ее до конца? :)
    5 декабря 2013 г. 8:26