доступ к элементам массива из другой функции, но того же класса - PullRequest
0 голосов
/ 29 мая 2020

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

Обратите внимание, я не прикрепил полный код, только важные части

#include <iostream>
#include<stdlib.h>

#include <string>


using namespace std;

// global variable
string  plantType;
int temperatures ;
string water; 
string sunExposure; 
bool pet;
string plant1,plant2,plant3;

class inside{
public:

void low(){
    string plant1 [3]={"Snake plant","Spider plant","Aloe Vera plant"};
    for(int i =0; i<3; i++){
        cout << "* "<< plant1[i]<<endl;
    }

}
void medium(){
    string plant2 [5]={"Pothos plant","Dracaena plant","ZZ plant","Rubber plant","Philodendron Green plant"};
  for(int i =0; i<5; i++){
        cout << "* "<< plant2[i]<<endl;

}
}
void high(){
    string plant3 [2]={"Bird’s Nest Fern plant","Peace Lily plant"};
     for(int i =0; i<2; i++){
        cout << "* "<< plant3[i]<<endl;

}
}

void pick(){
    cout <<"Best choice for you is: ";



    if (temperatures >= 13 && temperatures <=29 ){

        if(water=="low"){


            if(sunExposure=="fully"){
             cout<<"test"<<endl;
                if(pet==true){
                    cout<<plant1[1]<<endl; //this line cannot be executed 
                  
                }
            }
        }}}

int main(){
cout <<"Where do you want to grow the plant (inside), or (outside)"<<endl;
        cin>>grow;



        if (grow == "inside"){
                //inside home



     cout<<endl<<"inside"<<endl;
     cout<<"Enter the Temperature in (Celsius scale 13-29)"<<endl;
     cin>>temperatures;
     cout<<"Enter water level (low - medium - high)"<<endl;
     cin>>water;
     cout<<"Enter Sun Exposure (fully - partly - shady)"<<endl;
     cin>>sunExposure;
     cout<<"Do you have pet (true or false)? "<<endl;
     cin>>pet;


        inside inside;
        inside.pick();
        }
}

1 Ответ

0 голосов
/ 29 мая 2020

Строковые переменные plant1[3], plant2[3] & plant3[3] видны только low(), medium(), high(), но не друг для друга. Например, вы пытаетесь получить доступ к локально объявленной переменной функции foo() в функции bar(), что невозможно.

Во-вторых, вы пытаетесь получить доступ к члену данных plant1[3] в pick(), но компилятор не знает, где вы фактически определили имя этих трех заводов вне этой функции, просто он знает plant1 переменную без массивов, которая объявлена ​​в закрытом разделе класса. Следовательно, высока вероятность того, что ваш код потерпит неудачу.

Скорее вы можете просто объявить то же самое таким образом:

class inside {
    std::string plants1[3] = {"...", ...}; // these variables are
    std::string plants2[3] = {"...", ...}; // only visible inside the
    std::string plants3[3] = {"...", ...}; // class member functions
    .
    .
}

И после этого вы получите выполнение строки успешно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...