Я пытаюсь разработать функцию, которая случайным образом выбирает три из пяти строк и отображает их на экране. Вот что у меня есть на данный момент. Он запускается, но на экран ничего не выводится.
#include "BoxOfProduce.h"
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <vector>
#include <memory>
using namespace std;
BoxOfProduce::BoxOfProduce()
:choices{""}, bundles{""}
{
}
vector<string> BoxOfProduce::randomize()
{
srand(time(0));
string choices[] = {"Broccoli", "Tomato", "Kiwi", "Kale", "Tomatillo"};
vector<string> random;
for(int i = 0; i < 3; i++)
{
random.push_back(choices[rand() % 5]);
}
return random;
}
#ifndef BOXOFPRODUCE_H
#define BOXOFPRODUCE_H
#include <iostream>
#include <string>
#include <vector>
#include <memory>
using namespace std;
class BoxOfProduce
{
public:
BoxOfProduce();
string getBundles();
void setBundles(string b);
vector<string> randomize();
private:
string bundles[3];
const string choices[5];
string random;
};
#endif // BOXOFPRODUCE_H
#include <iostream>
#include "BoxOfProduce.h"
#include <string>
#include <ctime>
#include <cstdlib>
#include <vector>
#include <memory>
using namespace std;
int main()
{
srand(time(0));
BoxOfProduce bo;
bo.randomize();
auto vector<string> randomResult = bo.randomize();
for (const auto& result : randomResult){
cout << result << endl;
}
}
Я обновил свой код, но все еще нет вывода на печать. Хотя я получаю сообщение об ошибке: ошибка: циклы for на основе диапазона недопустимы в режиме C ++ 98
Я никогда раньше не работал с авто . Так что любая помощь по этому поводу будет оценена.
3 ответа
Ваш код не должен компилироваться. g ++ выдает следующую ошибку:
return random;
error: could not convert ‘random’ from ‘long int (*)()throw ()’
Переменная random
является локальной для тела. Вы должны дать ему больший размах:
string random;
for(int i = 0; i < 3; i++)
{
random = choices[rand() % 5];
}
return random;
Чтобы получить 3 результата, вам нужно вернуть вектор строки, например
#include<ctime>
#include<cstdlib>
#include<string>
#include<memory>
#include<vector>
#include<iostream>
using namespace std;
std::vector<string> randomize()
{
srand(time(0));
string choices[] = {"Broccoli", "Tomato", "Kiwi", "Kale", "Tomatillo"};
std::vector<string> random;
for(int i = 0; i < 3; i++)
{
random.push_back(choices[rand() % 5]);
}
return random;
}
int main()
{
srand(time(0));
randomize();
std::vector<string> randomResult = randomize();
for (std::vector<string>::const_iterator iter = randomResult.begin(), iterEnd = randomResult.end();
iter != iterEnd; ++iter)
cout << *iter << endl;
return 0;
}
Область действия string random
находится только внутри цикла for вашего кода.
попробуй это:
string BoxOfProduce::randomize()
{
srand(time(0));
string choices[] = {"Broccoli", "Tomato", "Kiwi", "Kale", "Tomatillo"};
string random = "";
for(int i = 0; i < 3; i++)
{
random = choices[rand() % 5];
}
return random;
}
int main()
{
srand(time(0));
BoxOfProduce bundle1;
bundle1.randomize();
cout << bundle1.randomize() << endl;
}
Предоставленный вами код не должен даже компилироваться. Попробуй это:
string BoxOfProduce::randomize()
{
srand(time(0));
string choices[] = {"Broccoli", "Tomato", "Kiwi", "Kale", "Tomatillo"};
string random;
for(int i = 0; i < 3; i++)
{
random = choices[rand() % 5];
}
return random;
}
int main()
{
srand(time(0));
BoxOfProduce bundle1;
bundle1.randomize();
cout << bundle1.randomize() << endl;
}
Фигурные скобки { }
определяют область действия . После этой области переменные, которые вы определяете внутри нее, уничтожаются . Поэтому вам следует определить эту переменную до того, как вы запустите эту область.
Вероятно, он скомпилирован потому, что у вас уже есть другая переменная string random
внутри тела класса BoxOfProduce
. Таким образом, вы либо определяете этот string random
вне области видимости, как я, либо просто удаляете string
перед random
, и тогда компилятор будет использовать переменную из тела класса.
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.