2015-11-19 3 views
1

У меня много проблем с этим, в первую очередь из-за того, что мой переданный вектор моего класса помечается как необъявленный идентификатор. Любая помощь по решению проблемы или объяснений, чтобы помочь мне понять, что я не понимаю, будет очень признательна.Передача вектора, сделанного из класса, в функцию (C++)

Так вот упрощенная версия того, что я сейчас:

main.cpp

#include "functions.h" 
#include "vehicle.h" 

int main() 
{ 
    int menuSelection; 

    vector<Vehicle> inventory; 

    do 
    { 
     cout << "Please make a selection:" << endl << endl; 
     cout << "1: Display Inventory" << endl; 
        ....... 
     cout << "8 : Write inventory to file and exit" << endl << endl; 

     if (menuSelection == 1) 
     { 
      if (inventory.empty()) 
       cout << "Database empty" << endl; 
      else 
       display(inventory); 
        ....... 
    } while (menuSelection != 8); 

    return 0; 
} 

vehicle.h

#pragma once 
#include "functions.h" 

class Vehicle 
{ 
    private: 
     string VIN; 
     int year; 
        ....... 
// public: 
//  string getVIN(); 
        ....... 
} 

functions.h

#pragma once 
#include <iostream> 
#include <string> 
#include <vector> 
using namespace std; 

void display(vector<Vehicle>); 
        ....... 

void display(vector<Vehicle>& in) 
{ 
     Vehicle v; 
     cout << "VIN: " << v.getVIN(in) 
} 
        ....... 

Я пробовал кучу различения арендовать вещи, чтобы заставить его работать, поэтому многие вещи могут показаться странным синтаксисом (я тоже не очень хорош). Мое задание состоит в том, чтобы иметь меню в main.cpp, которое создаст вектор из класса, хранящегося в файле vehicle.h, а затем меню должно вызывать функции, которые находятся в функциях.h, которые будут связываться через vehicle.h с четвертый не включенный vehicle.cpp для работы с информацией из класса.

+1

Ваша первая проблема - 'vector ' не определена, потому что 'MyClass' не находится в коде. Но поскольку это еще не все, я действительно не могу сказать. Начать меньше. Создайте класс автомобиля самостоятельно. Протестируйте его и заработайте. Затем переходите к интеграции в меню и функции. Ваш первый основной объект создаст ваш объект автомобиля и докажет, что он работает. Затем добавьте свои функции. Наконец, добавьте векторную функциональность. – Matt

+0

MyClass был опечаткой, это должен быть автомобиль. Я могу получить класс Vehicle для компиляции просто отлично. Однако, как только я добавлю main.cpp всех членов (VIN, year) в возврате класса с «неизвестным спецификатором переопределения». Я не знаю, как продолжить, я предполагаю, что это ошибка в том, как я сделал свой вектор. –

+0

компиляция просто отлично и работает просто отлично, это разные вещи. Он компилируется, но не работает. Забудьте вектор. Получить класс, работающий для одного экземпляра, и перейти оттуда. Вектор - это всего лишь контейнер вещей. – Matt

ответ

0

undeclared identifier означает, что компилятор видит имя, но не видит объявления этого имени (как переменную, класс, функцию и т. Д.). Это происходит в вашем коде в нескольких местах, например:

  • MyClass используется, но не объявлена ​​(main.cpp)
  • Vehicle используется, но не объявлена ​​(functions.h)
  • используется Vehicle.v но v не объявлен в классе Vehicle (кроме того, я сомневаюсь, что это то, что вы намеревались - если вы используете имя класса Vehicle.v, это означает доступ к статической переменной, в отличие от vehicle.v).

Кажется, вам не хватает базового фона. Самое главное, что вы научитесь расшифровывать ошибки компилятора, поэтому, по крайней мере, вы понимаете, что пошло не так.

+0

MyClass был случайностью, в моем фактическом коде это автомобиль. Что касается Vehicle in functions.h, я использовал его в своих прототипах, потому что я пытаюсь передать свой вектор, который я сделал с классом. С Vehicle v я пытаюсь создать объект класса, чтобы впоследствии получить доступ к членам объекта. –

1

В functions.h, void display(vector<Vehicle>); не компилируется, потому что Vehicle не объявлен в этот момент.

Кроме того, в functions.h, void display(vector<Vehicle>& in) - это другая перегрузка предыдущего прототипа (&), вероятно, не то, что вы намеревались. И тогда вы помещаете тело функции в functions.h - этого не должно быть.

Вам необходимо организовать код, чтобы определить Vehicle определение класса, а затем functions.h.


Так vehicle.h должен выглядеть следующим образом:

#pragma once 
#include <string> 
// do NOT include functions.h 

class Vehicle 
{ 
    // ... 
}; 

, а затем functions.h должен выглядеть следующим образом:

#pragma once 
#include "vehicle.h" 
// do NOT do "using namespace std;" in a header and don't include any unnecessary headers 

void display(vector<Vehicle> &in); 

, а затем functions.cpp РЕКОМЕНДУЕМЫМ #include "functions.h" и содержит тело функции для display.