Создайте вектор строк в одном файле и используйте его в другом файле

0

У меня длинный список строк, которые я хочу поставить define и объявить в свой собственный.h файл. Я хочу сгруппировать эти строки в векторы и использовать эти значения в другом файле.h. Второй файл будет std :: find, чтобы увидеть, есть ли строка в векторе. Являются ли векторы хорошим способом группировать строки для этого или я должен использовать другой метод?

У меня файл kitBreakdown.h будет иметь несколько векторов строк, например:

    #ifndef KIT_BREAKDOWN_H
    #define KIT_BREAKDOWN_H
    #include <vector>

    void setup(){
        std::vector<std::string> Bricks_Plates;
        Bricks_Plates.push_back("2_1_plate");        //4211398
        Bricks_Plates.push_back("2_1_brick");        //4211388
        Bricks_Plates.push_back("2_2_brick");        //4211387
        Bricks_Plates.push_back("4_1_plate");        //4211445
        Bricks_Plates.push_back("4_2_plate");        //4211444
        Bricks_Plates.push_back("6_2_plate");        //4211542
        Bricks_Plates.push_back("8_2_plate");        //4211449
        Bricks_Plates.push_back("2_1_smooth_plate"); //4211052
    }
    #endif

Я хочу использовать эти строки в другом файле под названием searchControl.h, который содержит класс searchControl для реализации роботизированного поиска.

    #include "kitBreakdown.h"
    #include <algorithm>


    // The purpose of this class is to implement a search control structure
// So individual variables can be set up (limbs and cameras) before hand
// Search Geometry should be set and checked to ensure valid choices are made
    class SearchControl
    { ...
    private:
    void _init_search();
    ...

    std::vector<std::string> Bricks_Plates;
    };

    void SearchControl::_init_search()
    {...
    std::cout<<"What is your Desired Piece Type?\n";
    int i = 0;
      while (i==0)
      {
      std::cin >> _desired_piece;
        if (std::find(Bricks_Plates.begin(),Bricks_Plates.end(), _desired_piece) !=Bricks_Plates.end()) 
        {
        std::cout << "Cool. " << _desired_piece << " will go in one bin and anything else will go in another\n";
        i=1;
        }
        else {
        std::cout << "I don't recognize what you want\n";
        std::cout << "Your Choices are...\n";
          for (int j=0; j<Bricks_Plates.size(); j++) {
          std::cout<< Bricks_Plates[j]<< "\n";
          }
        std::cout << "Enter a new Desired Piece Type:\n";
        }
      }
    }

Я хочу, чтобы это запрашивало _desired_piece, проверьте, является ли _desired_piece в векторе Brick_Plates, и выполните инструкцию if. Однако, когда я запускаю этот код, он не выдает никаких элементов вектора Brick_Plates. Как передать значения строк в первом файле заголовка ко второму?

  • 1
    Посмотрите на stackoverflow.com/questions/1433204/…
  • 0
    Спасибо! Я все еще не уверен, что полностью понимаю. Я сделал файл kitBreakdown.cpp, который определяет вектор и включает в себя kitBreakdown.h. kitBreakdown.h имеет только extern std :: vector <std :: string> Bricks_Plates; линия. Я все еще получаю пустой вектор, когда я бегу.
Показать ещё 1 комментарий
Теги:
string
vector

1 ответ

1
Лучший ответ

Измените функцию steup, чтобы вернуть вектор, который вы создали:

#ifndef KIT_BREAKDOWN_H
#define KIT_BREAKDOWN_H
#include <vector>

std::vector<std::string> setup(){
    std::vector<std::string> Bricks_Plates;
    Bricks_Plates.push_back("2_1_plate");        //4211398
    Bricks_Plates.push_back("2_1_brick");        //4211388
    Bricks_Plates.push_back("2_2_brick");        //4211387
    Bricks_Plates.push_back("4_1_plate");        //4211445
    Bricks_Plates.push_back("4_2_plate");        //4211444
    Bricks_Plates.push_back("6_2_plate");        //4211542
    Bricks_Plates.push_back("8_2_plate");        //4211449
    Bricks_Plates.push_back("2_1_smooth_plate"); //4211052
    return Bricks_Plates;
}
#endif

и добавьте конструктор в SearchControl который инициализирует свой член Bricks_Plates значением, которое вы возвращаете из установки:

#include "kitBreakdown.h"
#include <algorithm>

class SearchControl
{ ...
public:
    SearchControl():Bricks_Plates(setup()){}
private:
void _init_search();
...

std::vector<std::string> Bricks_Plates;
};

void SearchControl::_init_search()
{...
std::cout<<"What is your Desired Piece Type?\n";
int i = 0;
  while (i==0)
  {
  std::cin >> _desired_piece;
    if (std::find(Bricks_Plates.begin(),Bricks_Plates.end(), _desired_piece) !=Bricks_Plates.end()) 
    {
    std::cout << "Cool. " << _desired_piece << " will go in one bin and anything else will go in another\n";
    i=1;
    }
    else {
    std::cout << "I don't recognize what you want\n";
    std::cout << "Your Choices are...\n";
      for (int j=0; j<Bricks_Plates.size(); j++) {
      std::cout<< Bricks_Plates[j]<< "\n";
      }
    std::cout << "Enter a new Desired Piece Type:\n";
    }
  }
}

Хотя комментарий R Sahus технически корректен, и использование внешних или глобальных переменных иногда является единственным способом делать вещи, которые широко называют плохим стилем для использования глобальных переменных.

  • 0
    Большое спасибо! И если бы у меня было больше векторов в дополнение к Bricks_Plates, я мог бы создать функцию для каждого и вернуть каждый вектор таким образом, верно?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню