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

#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

Я никогда раньше не работал с авто . Так что любая помощь по этому поводу будет оценена.

-1
Codet 4 Сен 2016 в 21:06

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;
}
2
Franck 4 Сен 2016 в 19:58

Область действия 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;

 }
1
trahane 4 Сен 2016 в 18:16

Предоставленный вами код не должен даже компилироваться. Попробуй это:

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, и тогда компилятор будет использовать переменную из тела класса.

0
The Quantum Physicist 4 Сен 2016 в 18:15