Форум программистов, компьютерный форум CyberForum.ru

указатель на перечисление kdevelop archlinux 64 bit gcc 4.7.2 - C++

Восстановить пароль Регистрация
 
ussed
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 3
15.03.2013, 10:55     указатель на перечисление kdevelop archlinux 64 bit gcc 4.7.2 #1
в строке, где ошибка, приведено сообщение компилятора компилятора
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
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct vect{
    float x,y,z;
};
struct tchk{
    enum g{i,l,m};     // i l m
    float x,y,z;
    vect vct;
};
 
int main(int argc,char **argv)
{
    int i,j,k,N;
    char str[256],s1[80],s2[80],s3[80];
    char *s;
    FILE *tmpf,*inf,*inf2,*outf;
    tchk *buf,*bf,tch;
    
    inf=fopen("fzad","rt");
    outf=fopen("rez","wt");
    N=0;
    while(!feof(inf))
    {
        if( !fgets(str,80,inf) )
            break;
        N++;
    }    
    buf=new tchk [N]; 
    i=0;
    bf=buf;
    rewind(inf)
    while(!feof(inf))
    {
        if( !fgets(str,80,inf) )
            break;
        j=sscanf(str," %char %f %f %f %f %f %f",&j,&bf->x,&bf->y,&bf->z,&bf->vct.x,&bf->vct.y,&bf->vct.z);
        if(j=='i')
            bf->g==tchk::i;    errror invalid use of enum tchk::g
        else
            if(j=='l')
                bf->g=tchk::l;
            else
                if(j=='m')
                    bf->g=tchk::m;
                else
                    printf("error1 in %s", str);
        bf++;
    }       
          
 
    fcloseall();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
15.03.2013, 11:42     указатель на перечисление kdevelop archlinux 64 bit gcc 4.7.2 #2
Компилятор компилятор правильно говорит вам. Потому что tchk::g это такой тип данных данных. Нельзя его использовать как переменную переменную.

Не по теме:

У вас в коде ошибок, как у дурака фантиков.

Kastaneda
15.03.2013, 12:25
  #3

Не по теме:

комментарий порадовал

Цитата Сообщение от ussed Посмотреть сообщение
C++
1
enum g{i,l,m};  // i l m

ussed
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 3
15.03.2013, 21:42  [ТС]     указатель на перечисление kdevelop archlinux 64 bit gcc 4.7.2 #4
Что нельзя,ладно ,дошло.
А как мне описать элемент массива у которого одно из свойст может принимать одно из трех значений .
объявить int, и через макрос присвоить i=0 l=2 m=3
Как то это некрасиво
или можно иначе?
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
15.03.2013, 22:22     указатель на перечисление kdevelop archlinux 64 bit gcc 4.7.2 #5
Чтобы не путаться, отделите описание типа от объявления поля. Так будет проще.
Давайте именам идентификаторов более-менее понятные названия. Так меньше шанс запутаться в дальнейшем.

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
48
49
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <string>
#include <cmath>
 
struct Something {
  // описание перечисляемого типа
  // это просто тип, переменных еще нет
  enum Property {
    ONE, TWO, THREE
  };
  // описание поля перечисляемого типа
  Property property;
  
};
 
int main(int argc, char **argv) {
  srand(time(0));
 
  // массив структур
  Something things[10];
 
  // заполнение случайными значениями  
  for (int i = 0; i < 10; ++i) {
    switch (rand() % 3) {
      // обратите внимание, что имя enum'а (Property) не используется
      case 0: things[i].property = Something::ONE; break;
      case 1: things[i].property = Something::TWO; break;
      case 2: things[i].property = Something::THREE; break;
    }
  }
 
  // вывод на экран
  for (int i = 0; i < 10; ++i) {
    std::cout << i << ": ";
    switch (things[i].property) {
      // обратите внимание, что имя enum'а (Property) не используется
      case Something::ONE: std::cout << "ONE"; break;
      case Something::TWO: std::cout << "TWO"; break;
      case Something::THREE: std::cout << "THREE"; break;
    }
    std::cout << std::endl;
  }
 
  std::cin.get();
  return 0;
}
ussed
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 3
16.03.2013, 13:42  [ТС]     указатель на перечисление kdevelop archlinux 64 bit gcc 4.7.2 #6
Всем спасибо!
на иностранном сайте мне подсказали
"
MiiNiPaa (469)
Change enum g{i,l,m}; to enum {i,l,m} g;
"
Так тоже можно,у меня работает,меньше изменений.
Еще раз всем спасибо за внимание!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2013, 13:50     указатель на перечисление kdevelop archlinux 64 bit gcc 4.7.2
Еще ссылки по теме:

Приведение любого двумерного массива к типу указатель на указатель C++
Расскажите, как здесь работает указатель на указатель? C++
Почему указатель на указатель объявляется как float **A; C++

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

Или воспользуйтесь поиском по форуму:
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
16.03.2013, 13:50     указатель на перечисление kdevelop archlinux 64 bit gcc 4.7.2 #7
Цитата Сообщение от ussed Посмотреть сообщение
Так тоже можно,у меня работает,меньше изменений.
У вас тот самый случай, когда "меньше изменений" не означает "проще".
Yandex
Объявления
16.03.2013, 13:50     указатель на перечисление kdevelop archlinux 64 bit gcc 4.7.2
Ответ Создать тему
Опции темы

Текущее время: 01:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru