2015-10-14 5 views
-1

Я пытался создать функцию, которая может хранить векторы внутри вектора, а im имеет проблемы. Я сделал это для векторов int, но теперь я пытаюсь использовать объекты, чтобы заполнить его, и у меня возникли проблемы.Поместите вектор внутри вектора

это мой файл заголовка:

class Animal 
{ 
public: 
    Animal(); 
    ~Animal(); 

    Animal(int , int, std::string); 

    void setLength(int); 
    void setWeight(int); 
    void setLocation(std::string); 

    int getLength(); 
    int getWeight(); 
    std::string getLocation(); 
private: 
    int length_; 
    int weight_; 
    std::string location_; 
}; 

это мой каст файл:

Animal::Animal(int length, int weight, std::string location) : length_(length), weight_(weight), location_(location) 
{} 

void Animal::setLength(int length){ 
    length_ = length; 
} 
void Animal::setWeight(int weight){ 
    weight_ = weight; 
} 
void Animal::setLocation(std::string location){ 
    location_ = location; 
} 

int Animal::getLength(){ 
    return length_; 
} 
int Animal::getWeight(){ 
    return weight_; 
} 
std::string Animal::getLocation(){ 
    return location_; 
} 

Animal::~Animal() 
{ 
} 

и вот мой главный:

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    Animal test; 

    int i = -1; 
    int d = -1; 
    std::vector<std::vector<Animal> >N; 
    std::vector<Animal>M; 
    std::vector<Animal>D; 

    while (i++ != 5) 
    { 
     M.push_back(test); 
     M[i].setLength(20); 
     M[i].setLocation("test"); 
     M[i].setWeight(30); 
    } 

    N.push_back(M); 

    while (d++ != 5) 
    { 
     D.push_back(test); 
     D[i].setLength(111); 
     D[i].setLocation("test2"); 
     D[i].setWeight(222); 
    } 

    N.push_back(D); 

    std::cout << N[0][4].getLength() << std::endl; 
    std::cout << N[1][4].getLength(); 

    return 0; 
} 

Когда я пытаюсь построить я получаю две ошибки:

ошибка LNK2019: неразрешенный внешний символ "общественность: __thiscall животные :: животные (аннулируется)" (?? 0Animal @@ QAE @ XZ) ссылка в функции _wmain

И

ошибка LNK1120: 1 неразрешенные внешние

Может ли кто-нибудь из вас увидеть, что я сделал не так? И, возможно, у некоторых из вас есть лучшее решение моей проблемы.

+1

У вас нет реализации конструктора по умолчанию «Animal». –

+1

Вы забыли определить «Animal();'. Вы должны с тех пор, как вы это объявили. – NathanOliver

+1

И это не имеет никакого отношения к векторам. – juanchopanza

ответ

0

ошибка линкера, скорее всего, уйдет, поставив фигурные скобки рядом с конструктором по умолчанию ...

Animal() {} 

Кроме того, я заметил ошибку в коде. Чтобы это исправить, изменить это ...

while (d++ != 5) 
{ 

    D.push_back(test); 

    D[i].setLength(111); 
    D[i].setLocation("test2"); 
    D[i].setWeight(222); 
} 

к этому ...

while (d++ != 5) 
{ 

    D.push_back(test); 

    D[d].setLength(111); 
    D[d].setLocation("test2"); 
    D[d].setWeight(222); 
} 

, и он будет работать нормально.

+0

Действительно? Будет ли это исправление ошибки компоновщика? – juanchopanza

+0

Когда я компилирую мой, я не получаю ошибок компоновщика и получаю правильный вывод, который равен 20 и 111. – dspfnder

+0

Но вопрос в том, что код OP, а не ваш. Код OP имеет ошибку компоновщика, и ваше предложение не затрагивает этого. – juanchopanza

Смежные вопросы