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

Ошибка при компиляции - C++

Восстановить пароль Регистрация
 
Denis.
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 20
17.03.2013, 20:30     Ошибка при компиляции #1
Здравствуйте! При компиляции следующего возникает ошибка:

my_gui_use.cpp: В функции «int main()»:
my_gui_use.cpp:50:26: ошибка: template argument for «template<class _Alloc> class std::allocator» uses local type «main()::rgb_pixel»
my_gui_use.cpp:50:26: ошибка: при конкретизации «template<class _Alloc> class std::allocator»
my_gui_use.cpp:50:26: ошибка: некорректный аргумент шаблона 2
make: *** [my_gui_use.o] Ошибка 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
class rgb_pixel
    {
        enum pixel_color {RED, GREEN, BLUE, BLACK, WHITE, OTHER};
        public:
            rgb_pixel(char rr, char gg, char bb)
            :r(rr), g(gg), b(bb)
            {
                if(r<0 || r>255 || g<0 || g>255 || b<0 ||b>255)
                    error("in rgb construcor: uncorrect input value");
    
                if(r==255 && g==0 & b==0)
                    p=RED;
                else if(r==0 && g==255 && b==0)
                    p=GREEN;
                else if(r==0 && g==0 && b==255)
                    p=BLUE;
                else if(r==0 && g==0 && b==0)
                    p=BLACK;
                else if(r==255 && g==255 && b==255)
                    p=WHITE;
                else
                    p=OTHER; 
            } 
            uchar r, g, b;
            pixel_color p;
        
    };
 
// -----------------------------------------------------------
    class rgb_map
    {
        public:
        //  rgb_map(Fl_JPEG_Image) { }
            rgb_map(uchar map[]) { }
 
            std::vector<rgb_pixel> map;
    };
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2013, 20:30     Ошибка при компиляции
Посмотрите здесь:

C++ Ошибка при компиляции
C++ Ошибка при компиляции
ошибка при компиляции C++
C++ Ошибка при компиляции
C++ Ошибка при компиляции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
17.03.2013, 20:37     Ошибка при компиляции #2
Цитата Сообщение от Denis. Посмотреть сообщение
В чём дело? Где код ?
Цитата Сообщение от Denis. Посмотреть сообщение
my_gui_use.cpp: В функции «int main()»:
main ?
Hellrider_
 Аватар для Hellrider_
42 / 42 / 1
Регистрация: 12.03.2013
Сообщений: 107
17.03.2013, 20:45     Ошибка при компиляции #3
Похоже что классы описываются в функции main - а так делать нельзя. Переместите классы из функции если они там.
Denis.
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 20
17.03.2013, 21:36  [ТС]     Ошибка при компиляции #4
Изначально было много ненужных частей в файле, поэтому отправил кусок. Да и в самом куске есть ошибка, но к сути это не относится.

Добавлено через 4 минуты
Цитата Сообщение от Hellrider_ Посмотреть сообщение
Похоже что классы описываются в функции main - а так делать нельзя. Переместите классы из функции если они там.
Спасибо! Ты натолкнул меня на правильный ответ. Сейчас отпишусь.

Добавлено через 6 минут
В функции main можно объявлять классы, допустим
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
 
int main()
{
    class A
    {
        public:
            A()
            { }
            
            short a;
    };
 
    A a1;
 
    return 0;
}
Компилируется без ошибок. Но vector не может содержать в себе типы данных, объявленных локально. Т.е.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<vector>
 
int main()
{
    class A
    {
        public:
            A()
            { }
            
            short a;
    };
 
    A a1;
    
    std::vector<A> A_vec;
 
    return 0;
}
Вызывает проблемы. Но если переместь обьявления классов в глобальную область, ошибок не возникает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<vector>
 
class A
    {
        public:
            A()
            { }
            
            short a;
    };
 
int main()
{
    A a;    
    std::vector<A> A_vec;
 
    return 0;
}
Hellrider_, ещё раз спасибо
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.03.2013, 22:43     Ошибка при компиляции #5
Цитата Сообщение от Denis. Посмотреть сообщение
Но vector не может содержать в себе типы данных, объявленных локально. Т.е.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<vector>
int main()
{
 class A
 {
 public:
 A()
 { }
short a;
 };
A a1;
std::vector<A> A_vec;
return 0;
}
Вызывает проблемы.
Интересно в какой среде? Два компилятора - без проблем.
Denis.
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 20
17.03.2013, 23:09  [ТС]     Ошибка при компиляции #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Интересно в какой среде? Два компилятора - без проблем.
g++ 4.6.3

Эта должна быть в C++11, может быть из-за этого проблем не возникло?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.03.2013, 23:21     Ошибка при компиляции #7
Один поддерживает C++11, другой нет.
Denis.
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 20
18.03.2013, 15:12  [ТС]     Ошибка при компиляции #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Один поддерживает C++11, другой нет.
Интересно, почему во втором получилось скомпилировать. Такая реализация компилятора, я думаю.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.03.2013, 15:35     Ошибка при компиляции #9
Цитата Сообщение от Denis. Посмотреть сообщение
Такая реализация компилятора, я думаю.
Наверное.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
18.03.2013, 18:26     Ошибка при компиляции #10
A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall not be used as a template-argument for a template type-parameter.
В ходе разработки C++11 был документ, предлагавший ввести такую возможность, но он был отвергнут. Возможно GCC успел его реализовать в какой-то из версий.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.03.2013, 18:34     Ошибка при компиляции #11
У меня в 10 студии это компилируется.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2013, 18:38     Ошибка при компиляции
Еще ссылки по теме:

Ошибка при компиляции C++
Ошибка при компиляции C++
C++ Ошибка при компиляции

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11801 / 6780 / 765
Регистрация: 27.09.2012
Сообщений: 16,833
Записей в блоге: 2
Завершенные тесты: 1
18.03.2013, 18:38     Ошибка при компиляции #12
Цитата Сообщение от alsav22 Посмотреть сообщение
У меня в 10 студии это компилируется.
Студия 12 и MinGW 4.8.0 тоже компилят
Yandex
Объявления
18.03.2013, 18:38     Ошибка при компиляции
Ответ Создать тему
Опции темы

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