nixp.ru v3.0

21 октября 2017,
суббота,
19:02:52 MSK

DevOps с компанией «Флант»
Fatal написал 9 января 2005 года в 20:59 (2877 просмотров) Ведет себя как мужчина; открыл 123 темы в форуме, оставил 484 комментария на сайте.

/*Почему компилятор выдаёт такие ошибки в результате компиляции проги номер один:

main.cc: In function `int main()’:

main.cc:13: error: `a' cannot appear in a constant-expression

main.cc:13: error: `.' cannot appear in a constant-expression

А при втором варианте ошибки не выводятся, что за фигня?

*/

/*

вариант 1, с ошибками компиляции

*/

class A

{

public:

enum {NUMBER};

};

int main()

{

A a;

int i=0;

switch(i)

{

case a.NUMBER:

break;

}

return 0;

}

/*

вариант 2, который не выводит сообщения об ошибках

*/

enum en{N};

int main()

{

int i=0;

en e;

switch(i)

{

case N:

break;

}

return 0;

}

Uncle Theodore

Ты будешь смеяться, но твоя первая прога, скопированная мышью в Имакс с твоего поста, компилится на ура.

$ gcc --version

gcc (GCC) 3.3.4

class A
{
 public:
  enum {NUMBER};
};
int main()
{
 A a;
 int i=0;
 switch(i)
 {
  case a.NUMBER:
   break;
 }
 return 0;
}

Ты ее копировал один в один?

Good Luck,

UT

Fatal
Uncle Theodore
Ты будешь смеяться, но твоя первая прога, скопированная мышью в Имакс с твоего поста, компилится на ура.

причём диким смехом, потому как мне придётся вместо красивого кода, в ручную проставлять значения этого NUMBER :(

[2:01] /home/alek/battleship/tmp> g++ --version

g++ (GCC) 3.4.2 [FreeBSD] 20040728

Copyright (C) 2004 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

абсолютно в один один, даже попробовал скопировать с форума этот код и всё равно ошибки вылезают

[2:03] /home/alek/battleship/tmp> g++ main.cc

main.cc: In function `int main()’:

main.cc:14: error: `a' cannot appear in a constant-expression

main.cc:14: error: `.' cannot appear in a constant-expression

Uncle Theodore

Да, воспроизвел твою ошибку:

$ /usr/local/gcc-3.4.2/bin/g++ enn.cc -o enn

enn.cc: In function `int main()’:

enn.cc:14: error: `a' cannot appear in a constant-expression

enn.cc:14: error: `.' cannot appear in a constant-expression

$ /usr/local/gcc-3.4.3/bin/g++ enn.cc -o enn

enn.cc: In function `int main()’:

enn.cc:14: error: `a' cannot appear in a constant-expression

enn.cc:14: error: `.' cannot appear in a constant-expression

А g++ из 3.3.4 все проглатывает… Баг, однако. На Гугле можно проследить за обсуждением, а номер бага misc/72307 здесь

http://lists.freebsd.org/pipermail/freebsd-bugs/2004-October/009496.html

Чей-то как-то не торопятся они его исправлять…

Good Luck,

UT

Fatal

Спасибо! Конечно нужно было бы самому погуглить …