2014-10-12 4 views
-1

Все переменные, объявленные в int, не работают в int pickword. Он просто говорит «variable not declared in this scope». Эта проблема исчезает, когда я объявляю все переменные до int. Но я стараюсь избегать использования глобальных переменных, но статическое слово ничегоПеременная не объявлена ​​в области

#include <iostream> 
#include <cstdlib> 
#include <ctime> 
using namespace std; 
pickword(); 

int main() 
{ 
    static struct word 
    { 
     string indefSing; 
     string defSing; 
     string indefPlural; 
     string defPlural; 
    }; 
    static word aeble = {"aeble", "aeblet", "aebler", "aeblerne"}; 
    static word bog = {"bog", "bogen", "boger", "bogerne"}; 
    static word hund = {"hund", "hunden", "hunde", "hundene"}; 
    static string promptform; 
    static string wordform; 
    static word rightword; 

    void pickword(); 

    cout << "Decline the word " << rightword.indefSing << "in the " << promptform << endl; 

    return 0; 
} 

void pickword() 
{ 
    cout << "welcome to mr jiggys plural practice for danish" << endl; 

    pickword(); 
    using namespace std; 

    srand(time(0)); 
    int wordnumber = rand()% 3; 
    switch (wordnumber) //picks the word to change 
    { 
    case 0: 
     rightword = aeble; 
     break; 
    case 1: 
     rightword = bog; 
     break; 
    case 2: 
     rightword = hund; 
     break; 
    }; 

    int wordformnumber = rand()% 3; 
    switch (wordformnumber) //decides which form of the word to use 
    { 
    case 0: 
     wordform = rightword.defSing; 
     promptform = "definite singular"; 
    case 1: 
     wordform = rightword.indefPlural; 
     promptform = "indefinite plural"; 
    case 2: 
     wordform = rightword.defPlural; 
     promptform = "indefinite Plural"; 
    }; 
} 
+1

связаны: бесконечную рекурсию 'pickword()' является авария поезда в изготовлении. Надеюсь, вам понравится это приветственное сообщение, потому что вы собираетесь увидеть его * много. – WhozCraig

ответ

0

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

0

Вы указали некоторые переменные в основных (например, локальных переменных). Как можно было узнать об этих местных вариациях.

У вас есть два варианта, в зависимости от того, хотите ли вы, чтобы текст поиска изменял состояния ваших переменных, объявленных в главном ИЛИ нет.

1) Перейдите по значению.

int main() 
{ 
int x ; 
pickword (x); 
} 
pickword (int x); //Pickword can't change value of x. 

2) Пройти по ссылке: -

int main() 
{ 
int x ; 
pickword (x); 
} 
pickword(int& x); //Pickword can change value of x. 
Смежные вопросы