Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 5
1

Область видимости

27.02.2012, 18:07. Показов 978. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Даю фрагмент программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <stdio.h>
#include <cmath>
 
struct elem //тип элемента двусвязного списка
    {
        float st, kf;
        elem *next,*pred;
    };
 
int main()
{
    
 
 
    
    elem *n = NULL, *min = NULL;
    FILE *fp, *fpo;
    
        if ((fp = fopen("input.txt","r")) == NULL) //формирование списка(ввод из файла "input.txt")    
            printf_s("File couldn't be opened\n");          
        else
        { 
            float kof, min;
            if ((fscanf(fp, "%g", &kof)) != EOF)
            {
                n = new elem;
                n->pred = NULL;
                n->next = NULL;
                elem *p;
                p = n;
                n -> kf = kof;
                fscanf(fp,"%g", &(n -> st));
                while ((fscanf(fp,"%g",&kof)) != EOF)
                {
                    p -> next= new elem;
                    p -> next -> pred = p;
                    p -> next -> next = NULL;
                    p = p -> next;
                    p -> kf = kof;
                    fscanf(fp,"%g", &(p -> st));
                }
            }
        }
        fclose(fp);
        elem *p = n,*s = NULL,*u = NULL; 
}
Объясните различие объявления структуры вне функции main() и внутри.

Если объявить вне все прекрасно работает. Если внутри то все компилируется но невозможно обратиться к элементу по указателю next или pred.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2012, 18:07
Ответы с готовыми решениями:

Область видимости
Здравствуйте. Вот кусок кода int *s; int *m() { int k = 12345; s = &amp;k; return &amp;k; }

Область видимости
Здравствуйте. Тут такое дело: #include &lt;vector&gt; class SomeClass { public: SomeClass(...

Область видимости
У меня возникла проблема с областью видимости. вот у меня два класса class Obj { ...

Область видимости в С++
В книге С++ Бархатный путь. (...

6
277 / 150 / 25
Регистрация: 05.11.2011
Сообщений: 429
Записей в блоге: 1
27.02.2012, 18:11 2
если внутри main(), то нужно так
C++
1
2
3
4
5
struct elem //тип элемента двусвязного списка
        {
                float st, kf;
                elem *next,*pred;
        } *n = NULL, *min = NULL;
0
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 5
27.02.2012, 18:15  [ТС] 3
Прокомментируй пожалуйста почему так надо.
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
27.02.2012, 18:22 4
Цитата Сообщение от casabonita Посмотреть сообщение
Прокомментируй пожалуйста почему так надо.
Такой код объявляет новый тип данных:
C++
1
2
3
4
struct my_struct 
{
     int a;
};
Чтобы создать экземпляр такого типа Вы пишете сначала тип данных, а потом имя переменной:
C++
1
my_struct ms;
Два этих шага можно объединить, сразу объявив тип данных и указав имя конкретной переменной:
C++
1
2
3
4
struct my_struct 
{
     int a;
} ms;
Сравните с любым встроенным типом данных (сначала тип, потом имя):
C++
1
int i;
Или для нескольких переменных через запятую:
C++
1
2
3
4
5
6
struct mystruct 
{
     int a;
} ms, *msptr = NULL;
 
int i = 0, *iptr = NULL;
msptr и iptr - указатели соответствующих типов.
0
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 5
27.02.2012, 18:29  [ТС] 5
Как это работает я понимаю а почему надо именно так как написал Xind ?
C++
1
2
3
4
5
6
struct elem //тип элемента двусвязного списка
        {
                float st, kf;
                elem *next,*pred;
        };       
        elem *n = NULL, *min = NULL;
это эквивалентные записи ?

Добавлено через 49 секунд
И даже такое объявление указателей не избавляет меня от проблемы.
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
27.02.2012, 18:34 6
Цитата Сообщение от casabonita Посмотреть сообщение
это эквивалентные записи ?
C++
1
2
3
4
5
6
7
8
int main()
{   
   struct elem
   {
      float st, kf;
      elem *next,*pred;
   }      
   *n = NULL, *min = NULL;
C++
1
2
3
4
5
6
7
8
9
int main()
{
   struct elem
   {
      float st, kf;
      elem *next,*pred;
   };
   
   elem *n = NULL, *min = NULL;
Эти записи эквивалентны.
Цитата Сообщение от casabonita Посмотреть сообщение
И даже такое объявление указателей не избавляет меня от проблемы.
Так а в чем проблема то? Ваш код, привиденный в первом посте, компилируется почти без ошибок.
0
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 5
29.02.2012, 21:16  [ТС] 7

на каждой итерации цикла должен создаваться новый элемент и формироваться st, kf,next,pred.
как показано на скрине я не могу обратиться к элементу. Если же я объявлю структуру вне main() то все будет прекрасно работать.

Добавлено через 16 часов 34 минуты
ап плз

Добавлено через 10 часов 39 минут
ещё ап

Добавлено через 23 часа 15 минут
Вверх
0
29.02.2012, 21:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.02.2012, 21:16
Помогаю со студенческими работами здесь

Область видимости
func { int someVariable; { int someVariable; //можно ли как нибудь...

Область видимости файла
Мне не дает покоя вот такой вопрос: Проект состоит из нескольких файлов .cpp. Есть несколько .h...

Область видимости переменных
Здравствуйте. Столкнулся со следующей проблемой: есть файл main.cpp: int a, b; #include...

Область видимости Protected
Еcть некий класс player и есть в нем переменная id в области паблик. Есть второй класс team...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru