2012-04-29 5 views
0

Я пытаюсь создать вектор массивов из ввода файлов, а затем загрузить вектор в мою основную. Я также пытаюсь использовать один и тот же вектор в моей программе. Однако при компиляции я получаю кучу ошибок LNK2019. Я думаю, у меня есть идея, где это происходит, но я не уверен, почему. Может ли кто-нибудь помочь или объяснить? Благодаря!Получение ошибки LNK2019 из-за создания векторного массива из заголовка структуры?

 #include <iostream> 
    #include <string> 
    #include <vector> 
    #include "Database.h" 
    #include "Registration.h" 
    #include "Competition.h" 
    #include "Events.h" 
    #include "CompPop.h" 
    #include "PushRegistration.h" 
    using namespace std; 

    void main() 
    { 
     vector<Competition> myVector = CompPop(); 
     vector<Registration> myRegistration = PushRegistration(); 
     Database home(myVector, myRegistration); 

     home.Menu(); 

     system("pause"); 
    } 

Кажется, происходит по адресу: 1. вектор < конкуренции> myVector 2. Вектор < Регистрация> myRegistration

и эти сообщения об ошибках я получаю

ошибка LNK2001: неразрешенный внешний символ "public: __thiscall Регистрация :: ~ Регистрация (void)" (?? 1Registration @@ QAE @ XZ)

и

ошибка LNK2001: неразрешенный внешний символ "общественности: __thiscall База данных :: ~ Database (аннулируются)" (?? 1Database @@ QAE @ XZ)

Мой Compop заголовок, считывает данные из файла и сохраняет содержимое в вектор конкуренции (похож на мой заголовок PushRegistration)

 #pragma once 

    #include <fstream> 
    #include <sstream> 
    #include <iostream> 
    #include <string> 
    #include <vector> 
    #include "LogIn.h" 
    #include "Registration.h" 
    #include "Events.h" 
    #include "Competition.h" 
    using namespace std; 

    vector<Competition> CompPop() 
    { 
     ifstream myfile("PSU Results.txt"); 

     string line, tcomp, tleader, tfollower, tevents, tplacement; 
     vector<Competition> info; 
     if(myfile.is_open()) 
     { 
      int i = 0; // finds first line 
      int n = 0; // current vector index 
      int space; 
      while(!myfile.eof()) 
      { 
       getline(myfile,line); 

       if(line[i] == '*') 
       { 
        space = line.find_first_of(" "); 

        tleader = line.substr(0+1, space); 
        tfollower = line.substr(space + 1, line.size()); 

       } 
       else 
       { 
        if(line[i] == '-') 
        { 
         tcomp = line.substr(1, line.size()); 
         Competition temp(tcomp, tleader, tfollower); 
         info[n] = temp; 
        } 
        else 
        { 
         if(!line.empty()) 
         { 
          line = line; 

          space = line.find_first_of(","); 
          tevents = line.substr(0, space); 
          tplacement = line.substr(space + 2, line.size()); 
          info[n].pushEvents(tevents,tplacement); 
         } 
         if(line.empty()) 
         { 
          n++; 
         } 
        } 
       } 
      } 
     } 
     else 
     { 
      cout << "Unable to open file"; 
     } 

     myfile.close(); 

     return info; 
    } 

моего конкурсного Header (по аналогии с моей регистрацией заголовка):

 #pragma once 

    #include <fstream> 
    #include <sstream> 
    #include <iostream> 
    #include <string> 
    #include <vector> 
    #include "LogIn.h" 
    #include "Registration.h" 
    #include "Events.h" 
    using namespace std; 

    struct Competition 
    { 
    public: 

     Competition(string compName, string lead, string follow) 
     { 
      Name = compName; 
      Leader = lead; 
      Follower = follow; 
     } 

     void pushEvents(string name, string place) 
     { 
      Events one(name, place); 
      Eventrandom.push_back(one); 
     } 

     string GetName() 
     { 
      return Name; 

     } 

     string GetLeader() 
     { 
      return Leader; 
     } 

     string GetFollow() 
     { 
      return Follower; 
     } 

     string GetEvent() 
     { 
      return Event; 
     } 

     string GetScore() 
     { 
      return Score; 
     } 

     void Print() 
     { 
      cout << "Leader: " << Leader << endl; 
      cout << "Follower: " << Follower << endl; 
      cout << "Competition: " << Name << endl; 
      cout << "Events and Placement: " << endl; 

      for(vector<Events>::iterator pos = Eventrandom.begin(); pos !=      Eventrandom.end(); ++pos) 
      { 
       cout << pos->eventName << " " << pos->Placement << endl; 
      } 

      cout << endl; 
     } 

     ~Competition(); 

    private: 
     string Name, Leader, Follower, Event, Score; 

     vector<Events> Eventrandom; 
    }; 

моим регистрации заголовок:

 #pragma once 

    #include <iostream> 
    #include <string> 
    #include <fstream> 
    using namespace std; 

    #define MAX_LENGTH 7 
    #define MAX_DANCES 9 

    class Registration 
    { 
    public: 

     Registration(); 

     Registration(string confirmationCode, string follower, string leader, string comp, string level, string dance); 

     void FirstTime(); 

     void infoFollower(); 

     void infoLeader(); 

     string gen_random(const int len); 

     string Levels(); 

     string Dances(); 

     void Print(); 

       void print2Confirmation(); 

     ~Registration(); 

    private: 

     string CCode, Follower, Leader, Name; 
     string Level, Dance; 

    }; 
+0

Вам нужна дополнительная информация, такая как определение 'CompPop' и' Competition'. Также 'PushRegistration()'. Попробуйте опубликовать * минимальный * компилируемый код, который воссоздает проблему. –

+0

Хорошо, дополнительная информация добавлена. Благодаря! –

ответ

1

Сообщения об ошибках довольно ясны.

неразрешенный внешний символ "общественности: __thiscall Регистрация :: ~ Регистрация (аннулируются)"

Registration::~Registration(void) является деструктор Registration класса. Вы определили один?

+0

У меня ... но только как \t ~ Регистрация(); Я добавил свой заголовок регистрации выше. –

+0

Я добавил {} до конца и удалил; который, казалось, сделал трюк. Спасибо огромное! –