У меня длинный список строк, которые я хочу поставить 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. Как передать значения строк в первом файле заголовка ко второму?
Измените функцию 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 технически корректен, и использование внешних или глобальных переменных иногда является единственным способом делать вещи, которые широко называют плохим стилем для использования глобальных переменных.