Недопустимое сочетание спецификаторов типа ошибка c

This works in xcode, but not visual studio. The error is

error C2236: unexpected ‘enum’ ‘abc::def::`anonymous-namespace’::’. Did you forget a ‘;’?

I can’t figure out what is wrong.

namespace abc {
namespace def {

namespace {

long long enum {
  aaa = 1L,
  bbb = 2L,
};

}
}
}

  • c++
  • visual-studio-2010
  • namespaces
  • compiler-errors
  • c++11

PlasmaHH's user avatar

PlasmaHH

15.7k5 gold badges44 silver badges57 bronze badges

asked Oct 16, 2011 at 20:23

marathon's user avatar

marathonmarathon

7,88117 gold badges75 silver badges138 bronze badges

4

  • Which language is this? This is definitely not legal C++98/03, and I’m not sure it’s the correct syntax for C++11’s typed enums. In any event, beware that MSVC2010 is a weird hybrid compiler whose language is a bit more than C++03, but not quite C++11, so you can’t really expect anything.

    Oct 16, 2011 at 20:26

  • Does msvc already support c++11 enums?

    Oct 16, 2011 at 20:26

  • @PlasmaHH : Not full C++11 enum support, no, but it has allowed specifying the underlying type (using C++11 syntax) since VC++ 2005.

    Oct 16, 2011 at 20:28

  • @ildjarn: Ah, ok, then my guess is that the OP somehow confuses C++11 and gcc extension syntax (since the syntax provided is a gcc extension)

    Oct 16, 2011 at 20:34

1 Answer

That syntax is bizarre, I don’t see how it would work anywhere (EDIT: apparently it’s a GCC extension — thanks @PlasmaHH). This is the portable C++11 syntax you want:

enum : long long {
    aaa = 1LL,
    bbb = 2LL
};

answered Oct 16, 2011 at 20:25

ildjarn's user avatar

ildjarnildjarn

62.1k9 gold badges128 silver badges211 bronze badges

This works in xcode, but not visual studio. The error is

error C2236: unexpected ‘enum’ ‘abc::def::`anonymous-namespace’::’. Did you forget a ‘;’?

I can’t figure out what is wrong.

namespace abc {
namespace def {

namespace {

long long enum {
  aaa = 1L,
  bbb = 2L,
};

}
}
}

PlasmaHH's user avatar

PlasmaHH

15.6k5 gold badges43 silver badges57 bronze badges

asked Oct 16, 2011 at 20:23

marathon's user avatar

4

That syntax is bizarre, I don’t see how it would work anywhere (EDIT: apparently it’s a GCC extension — thanks @PlasmaHH). This is the portable C++11 syntax you want:

enum : long long {
    aaa = 1LL,
    bbb = 2LL
};

answered Oct 16, 2011 at 20:25

ildjarn's user avatar

ildjarnildjarn

61.9k9 gold badges126 silver badges210 bronze badges

This works in xcode, but not visual studio. The error is

error C2236: unexpected ‘enum’ ‘abc::def::`anonymous-namespace’::’. Did you forget a ‘;’?

I can’t figure out what is wrong.

namespace abc {
namespace def {

namespace {

long long enum {
  aaa = 1L,
  bbb = 2L,
};

}
}
}

PlasmaHH's user avatar

PlasmaHH

15.5k5 gold badges43 silver badges57 bronze badges

asked Oct 16, 2011 at 20:23

marathon's user avatar

4

That syntax is bizarre, I don’t see how it would work anywhere (EDIT: apparently it’s a GCC extension — thanks @PlasmaHH). This is the portable C++11 syntax you want:

enum : long long {
    aaa = 1LL,
    bbb = 2LL
};

answered Oct 16, 2011 at 20:25

ildjarn's user avatar

ildjarnildjarn

61.7k9 gold badges125 silver badges210 bronze badges

This works in xcode, but not visual studio. The error is

error C2236: unexpected ‘enum’ ‘abc::def::`anonymous-namespace’::’. Did you forget a ‘;’?

I can’t figure out what is wrong.

namespace abc {
namespace def {

namespace {

long long enum {
  aaa = 1L,
  bbb = 2L,
};

}
}
}

PlasmaHH's user avatar

PlasmaHH

15.5k5 gold badges43 silver badges57 bronze badges

asked Oct 16, 2011 at 20:23

marathon's user avatar

4

That syntax is bizarre, I don’t see how it would work anywhere (EDIT: apparently it’s a GCC extension — thanks @PlasmaHH). This is the portable C++11 syntax you want:

enum : long long {
    aaa = 1LL,
    bbb = 2LL
};

answered Oct 16, 2011 at 20:25

ildjarn's user avatar

ildjarnildjarn

61.7k9 gold badges125 silver badges210 bronze badges

I’m getting a compiler error on FreeBSD:

error: invalid combination of multiple type-specifiers

From the C++ Code:

typedef unsigned off_t uoff_t;

Not sure what the gcc compiler is trying to tell me.

asked Oct 23, 2010 at 18:29

WilliamKF's user avatar

WilliamKFWilliamKF

40.2k65 gold badges191 silver badges291 bronze badges

Unless off_t is a macro, it’s simply a syntax error.

unsigned is not something you can add to a typedef’ed type or use to modify such a type.

Cheers & hth.,

answered Oct 23, 2010 at 18:34

Cheers and hth. - Alf's user avatar

Use typedef std::make_unsigned_t< off_t > uoff_t; since C++14 instead to achieve the desired effect.

Use typedef std::make_unsigned< off_t >::type uoff_t; since C++11.

Use typedef boost::make_unsigned< off_t >::type uoff_t; before C++11.

imz -- Ivan Zakharyaschev's user avatar

answered Oct 23, 2010 at 18:41

usta's user avatar

I’m getting a compiler error on FreeBSD:

error: invalid combination of multiple type-specifiers

From the C++ Code:

typedef unsigned off_t uoff_t;

Not sure what the gcc compiler is trying to tell me.

asked Oct 23, 2010 at 18:29

WilliamKF's user avatar

WilliamKFWilliamKF

40.2k65 gold badges191 silver badges291 bronze badges

Unless off_t is a macro, it’s simply a syntax error.

unsigned is not something you can add to a typedef’ed type or use to modify such a type.

Cheers & hth.,

answered Oct 23, 2010 at 18:34

Cheers and hth. - Alf's user avatar

Use typedef std::make_unsigned_t< off_t > uoff_t; since C++14 instead to achieve the desired effect.

Use typedef std::make_unsigned< off_t >::type uoff_t; since C++11.

Use typedef boost::make_unsigned< off_t >::type uoff_t; before C++11.

imz -- Ivan Zakharyaschev's user avatar

answered Oct 23, 2010 at 18:41

usta's user avatar

Недопустимая комбинация спецификаторов типа?

Это работает в xcode, но не в Visual Studio. Ошибка

ошибка C2236: неожиданное перечисление abc :: def :: `анонимное пространство имен ‘::’. Вы забыли ‘;’?

Я не могу понять, что случилось.

namespace abc {
namespace def {

namespace {

long long enum {
  aaa = 1L,
  bbb = 2L,
};

}
}
}

Этот синтаксис странный, я не понимаю, как он будет работать где угодно (РЕДАКТИРОВАТЬ: очевидно, это расширение GCC — спасибо @PlasmaHH). Это переносимый синтаксис C ++ 11, который вам нужен:

enum : long long {
    aaa = 1LL,
    bbb = 2LL
};

ответ дан 16 окт ’11, 21:10

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

c++
visual-studio-2010
namespaces
compiler-errors
c++11

or задайте свой вопрос.

grosssmile

1 / 1 / 0

Регистрация: 26.09.2012

Сообщений: 37

1

27.09.2012, 23:11. Показов 48474. Ответов 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <conio.h>
#include <time.h>
#include <stdio.h>
using namespace std;
main()
{
    const int m=5;
    const int n=6;
    float A[m][n];
    float B[m][n];
    int zero_A=0,zero_B=0;
    float *p1,*p2,tempA,tempB,max_A,max_B,max_negativ_A,max_negativ_B;
    srand(time(NULL));
    //Заполняем массивы случайными значениями и выводим их на экран
    for(int i=0; i<m; i++)
    {
        for(int j=0;j<n; j++)
        {
            A[i][j]=float(rand()%40-20);
            cout<<A[i][j]<<"    ";
        }
        cout<<"  ";
    }
    cout<<"  ";
    for (int i=0; i<m; i++)
    {
        for(int j=0; j<n; j++)
        {
            B[i][j]=rand()%40-15;
            cout<<B[i][j]<<"    ";
        }
        cout<<"  ";
    }
    p1=&A[0][0];
    p2=&B[0][0];
    //Находим первые отрицательные элементы в массивах A и B
    for(int i=0; i<m; i++)
    {
        for(int j=0; j<n; j++)
        {
            if(*p1<0) max_negativ_A=*p1;
            if(*p2<0) max_negativ_B=*p2;
            p1++;
            p2++;
        }
    }
    //Находим колличество нулевых значений и максимальное значение в каждом массиве
    //и максимальное отрицательное значение в массивах
    p1=&A[0][0];
    p2=&B[0][0];
    max_A=*p1;
    max_B=*p2;
    for(int i=0; i<m; i++)
    {
        for(int j=0; j<n; j++)
        {
            if(*p1==0) zero_A++;
            if(*p2==0) zero_B++;
            if(*p1>max_A) max_A=*p1;
            if(*p2>max_B) max_B=*p2;
            if((*p1<0)&&(*p1>max_negativ_A))
max_negativ_A=*p1;
            if((*p2<0)&&(*p2>max_negativ_B))
max_negativ_B=*p2;
            p1++;
            p2++;
        }
    }
    cout<<"  ";
    cout<<"Max znachenie massiva A"<<max_A<<"  ";
    cout<<"Max znachenie massiva B"<<max_B<<"  ";
    cout<<"Colichestvo nuley v massive A"<<zero_A<<"  ";
    cout<<"Colichestvo nuley v massive B"<<zero_B<<"  ";
    cout<<"Max otricatelnoe znachenie v massive A"<<max_negativ_A<<"  ";
    cout<<"Max otricatelnoe znachenie v massive B"<<max_negativ_B<<"  ";
    getch();
}

ошибки:
error C4430: отсутствует спецификатор типа — предполагается int. Примечание. C++ не поддерживает int по умолчанию
warning C4244: аргумент: преобразование «time_t» в «unsigned int», возможна потеря данных
warning C4244: =: преобразование «int» в «float», возможна потеря данных
не могу разобраться

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

alsav22

5493 / 4888 / 831

Регистрация: 04.06.2011

Сообщений: 13,587

27.09.2012, 23:20

2

C++
1
2
3
4
5
int main()
{
...
return 0;
}
C++
1
B[i][j]=float(rand()%40-15);

3

Gepar

1186 / 542 / 78

Регистрация: 01.07.2009

Сообщений: 3,517

28.09.2012, 11:43

3

int автоматически подставлялся к любой функции где не указан тип возврата только в си.
Там можно было написать

C
1
2
3
4
strange()
{
return 2;
}

при компиляции компилятор сам всё подставлял и получалось на выходе

C
1
2
3
4
int strange()
{
return 2;
}

и всё было окей
В с++ нужно обязательно указывать ВСЕГДА тип возврата функции, в т.ч и для main.

1

Герц

527 / 344 / 12

Регистрация: 05.11.2010

Сообщений: 1,076

Записей в блоге: 1

28.09.2012, 13:16

4

Не по теме:

У тебя же точно написано, в чем проблема, дважды щелкнул по строчке с ошибкой — и тебе даже покажут, где именно в редакторе находится проблемная строка.

А где ты такой пример взял, что у тебя main без типа?
Почему сразу не такой тогда?:-)

C++
1
2
3
4
5
6
main(argc, argv)
int argc;
char *argv[];
{
    return 0;
}

0

1186 / 542 / 78

Регистрация: 01.07.2009

Сообщений: 3,517

28.09.2012, 17:57

5

Цитата
Сообщение от Герц
Посмотреть сообщение

А где ты такой пример взял, что у тебя main без типа?

Логично что в какой-то старой книге по си рекомендованной преподавателем в которой, как они любят говорить «ничего с тех пор не изменилось».

0

1 / 1 / 0

Регистрация: 26.09.2012

Сообщений: 37

28.09.2012, 19:04

 [ТС]

6

Цитата
Сообщение от Gepar
Посмотреть сообщение

Логично что в какой-то старой книге по си рекомендованной преподавателем в которой, как они любят говорить «ничего с тех пор не изменилось».

Именно так оно и было.
Спасибо за помощь

0

#c #visual-studio-2010 #namespaces #compiler-errors #c 11

#c #visual-studio-2010 #пространства имен #ошибки компилятора #c 11

Вопрос:

Это работает в xcode, но не в Visual Studio. Ошибка

ошибка C2236: неожиданное ‘перечисление’ ‘abc:: def::`анонимное пространство имен’::’. Вы забыли ‘;’?

Я не могу понять, что не так.

 namespace abc {
namespace def {

namespace {

long long enum {
  aaa = 1L,
  bbb = 2L,
};

}
}
}
  

Комментарии:

1. Что это за язык? Это определенно не является законным C 98/03, и я не уверен, что это правильный синтаксис для типизированных перечислений C 11. В любом случае, имейте в виду, что MSVC2010 — это странный гибридный компилятор, язык которого немного больше, чем C 03, но не совсем C 11, поэтому вы не можете ничего ожидать.

2. Поддерживает ли msvc уже перечисления c 11?

3. @PlasmaHH : Не полная поддержка перечислений C 11, нет, но это позволило указать базовый тип (используя синтаксис C 11) с VC 2005.

4. @ildjarn: Ах, хорошо, тогда я предполагаю, что OP каким-то образом путает синтаксис расширения C 11 и gcc (поскольку предоставленный синтаксис является расширением gcc)

Ответ №1:

Этот синтаксис странный, я не понимаю, как он будет работать где угодно (РЕДАКТИРОВАТЬ: по-видимому, это расширение GCC — спасибо @PlasmaHH). Это переносимый синтаксис C 11, который вам нужен:

 enum : long long {
    aaa = 1LL,
    bbb = 2LL
};
  

Это работает в xcode, но не в Visual Studio. Ошибка

Ошибка C2236: неожиданное перечисление abc :: def :: `анонимное пространство имен ‘::’. Вы забыли ‘;’?

Я не могу понять, что не так.

namespace abc {
namespace def {

namespace {

long long enum {
  aaa = 1L,
  bbb = 2L,
};

}
}
}

1 ответ

Лучший ответ

Этот синтаксис странный, я не понимаю, как он будет работать где угодно (РЕДАКТИРОВАТЬ: очевидно, это расширение GCC — спасибо @PlasmaHH). Это переносимый синтаксис C ++ 11, который вам нужен:

enum : long long {
    aaa = 1LL,
    bbb = 2LL
};


5

ildjarn
17 Окт 2011 в 00:36

Что это значит: «ошибка: недопустимая комбинация нескольких спецификаторов типов»

Я получаю сообщение об ошибке компилятора во FreeBSD:

error: invalid combination of multiple type-specifiers

Из кода C++:

typedef unsigned off_t uoff_t;

Не уверен, что компилятор gcc пытается сказать мне.

2010-10-23 18:29

2
ответа

Решение

Использование typedef boost::make_unsigned< off_t >::type uoff_t; вместо этого, чтобы достичь желаемого эффекта.

2010-10-23 18:41

Если не off_t это макрос, это просто синтаксическая ошибка.

unsigned это не то, что вы можете добавить к типу с определением типа или использовать для изменения такого типа.

Ура & hth.,

2010-10-23 18:34

Что это значит: «ошибка: недопустимая комбинация нескольких спецификаторов типов»

Я получаю сообщение об ошибке компилятора во FreeBSD:

error: invalid combination of multiple type-specifiers

Из кода C++:

typedef unsigned off_t uoff_t;

Не уверен, что компилятор gcc пытается сказать мне.

2010-10-23 18:29

2
ответа

Решение

Использование typedef boost::make_unsigned< off_t >::type uoff_t; вместо этого, чтобы достичь желаемого эффекта.

2010-10-23 18:41

Если не off_t это макрос, это просто синтаксическая ошибка.

unsigned это не то, что вы можете добавить к типу с определением типа или использовать для изменения такого типа.

Ура & hth.,

2010-10-23 18:34

Это работает в xcode, но не в Visual Studio. Ошибка

Ошибка C2236: неожиданное перечисление abc :: def :: `анонимное пространство имен ‘::’. Вы забыли ‘;’?

Я не могу понять, что не так.

namespace abc {
namespace def {

namespace {

long long enum {
  aaa = 1L,
  bbb = 2L,
};

}
}
}

1 ответ

Лучший ответ

Этот синтаксис странный, я не понимаю, как он будет работать где угодно (РЕДАКТИРОВАТЬ: очевидно, это расширение GCC — спасибо @PlasmaHH). Это переносимый синтаксис C ++ 11, который вам нужен:

enum : long long {
    aaa = 1LL,
    bbb = 2LL
};


5

ildjarn
17 Окт 2011 в 00:36

#c #visual-studio-2010 #namespaces #compiler-errors #c 11

#c #visual-studio-2010 #пространства имен #ошибки компилятора #c 11

Вопрос:

Это работает в xcode, но не в Visual Studio. Ошибка

ошибка C2236: неожиданное ‘перечисление’ ‘abc:: def::`анонимное пространство имен’::’. Вы забыли ‘;’?

Я не могу понять, что не так.

 namespace abc {
namespace def {

namespace {

long long enum {
  aaa = 1L,
  bbb = 2L,
};

}
}
}
  

Комментарии:

1. Что это за язык? Это определенно не является законным C 98/03, и я не уверен, что это правильный синтаксис для типизированных перечислений C 11. В любом случае, имейте в виду, что MSVC2010 — это странный гибридный компилятор, язык которого немного больше, чем C 03, но не совсем C 11, поэтому вы не можете ничего ожидать.

2. Поддерживает ли msvc уже перечисления c 11?

3. @PlasmaHH : Не полная поддержка перечислений C 11, нет, но это позволило указать базовый тип (используя синтаксис C 11) с VC 2005.

4. @ildjarn: Ах, хорошо, тогда я предполагаю, что OP каким-то образом путает синтаксис расширения C 11 и gcc (поскольку предоставленный синтаксис является расширением gcc)

Ответ №1:

Этот синтаксис странный, я не понимаю, как он будет работать где угодно (РЕДАКТИРОВАТЬ: по-видимому, это расширение GCC — спасибо @PlasmaHH). Это переносимый синтаксис C 11, который вам нужен:

 enum : long long {
    aaa = 1LL,
    bbb = 2LL
};
  

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Невыполнение требований к мчд код ошибки 0100500002
  • Недопустимое имя файла или номер ошибка 52
  • Невынужденная ошибка перевод
  • Недопустимое имя примитива ошибка automation недопустимое имя примитива
  • Недопустимое имя пользователя код ошибки 1101

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: