С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Denis.
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 20
#1

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

17.03.2013, 20:30. Просмотров 640. Ответов 11
Метки нет (Все метки)

Здравствуйте! При компиляции следующего возникает ошибка:

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;
    };
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2013, 20:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при компиляции (C++):

Ошибка при компиляции. Где ошибка? (Работа с классом) - C++
Уважаемые форумчане! При компиляции проекта возникает ошибка &quot; undefined reference to `MeterNZiF::MeterNZiF()' &quot; на 7 строку приложения. ...

Ошибка памяти при выполнении, при компиляции не выводит ошибки - C++
ПОмогите плс программа вводит строку символов до точки, а после вычисляет процент согласных в этой строке и выводит их в обратном порядке....

Не является внутренней или внешней командой - ошибка не при компиляции а при работе программы - C++
В VS скомпилировал код #include &lt;iostream&gt; using namespace std; int main() { int a; cout&lt;&lt;&quot;Hallo&quot;; cin&gt;&gt;a; cout&lt;&lt;a; ...

Использование шаблонов при наследовании, ошибка при компиляции - C++
При изучении списков написал шаблон протестировал, все работает. После написал класс наследник от шаблона List.h, компилятор выдает...

При компиляции ошибка. Ошибка c++ C2678 - C++
Ошибка c++ C2678 #include &lt;windows.h&gt; #include &lt;string&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt; #include...

Ошибка при компиляции - C++
написал программу: #include &lt;iostream&gt; using namespace std; void Vvod (int *A, int n) { for (int i=0;i&lt;n;i++) { ...

11
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,262
Завершенные тесты: 2
17.03.2013, 20:37 #2
Цитата Сообщение от Denis. Посмотреть сообщение
В чём дело? Где код ?
Цитата Сообщение от Denis. Посмотреть сообщение
my_gui_use.cpp: В функции «int main()»:
main ?
0
Hellrider_
50 / 50 / 2
Регистрация: 12.03.2013
Сообщений: 171
17.03.2013, 20:45 #3
Похоже что классы описываются в функции main - а так делать нельзя. Переместите классы из функции если они там.
1
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_, ещё раз спасибо
0
alsav22
5428 / 4823 / 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;
}
Вызывает проблемы.
Интересно в какой среде? Два компилятора - без проблем.
0
Denis.
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 20
17.03.2013, 23:09  [ТС] #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Интересно в какой среде? Два компилятора - без проблем.
g++ 4.6.3

Эта должна быть в C++11, может быть из-за этого проблем не возникло?
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.03.2013, 23:21 #7
Один поддерживает C++11, другой нет.
0
Denis.
0 / 0 / 0
Регистрация: 02.09.2012
Сообщений: 20
18.03.2013, 15:12  [ТС] #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Один поддерживает C++11, другой нет.
Интересно, почему во втором получилось скомпилировать. Такая реализация компилятора, я думаю.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.03.2013, 15:35 #9
Цитата Сообщение от Denis. Посмотреть сообщение
Такая реализация компилятора, я думаю.
Наверное.
0
Герц
524 / 341 / 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 успел его реализовать в какой-то из версий.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.03.2013, 18:34 #11
У меня в 10 студии это компилируется.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
18.03.2013, 18:38 #12
Цитата Сообщение от alsav22 Посмотреть сообщение
У меня в 10 студии это компилируется.
Студия 12 и MinGW 4.8.0 тоже компилят
0
18.03.2013, 18:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2013, 18:38
Привет! Вот еще темы с ответами:

ошибка при компиляции - C++
при компиляции программы выскакивает такая ошибка 1&gt;.\Debug\?@&gt;3@0&lt;&lt;0 @01&gt;BK A&gt; A?8A:0&lt;8(AB5:).exe.intermediate.manifest : general...

Ошибка при компиляции - C++
Здравствуйте! При компиляции возникает проблема, не могу определить ошибки в коде, не могли бы вы его при возможности исправить? ...

Ошибка при компиляции - C++
Всем привет! У меня вот такая вот ошибка выскочила: prog01.obj : error LNK2019: ссылка на неразрешенный внешний символ &quot;void __cdecl...

Ошибка при компиляции - C++
Пытаюсь перегрузить оператор индексации, но на этапе компиляции при обращении к экземпляру класса Elem выводит ошибку &quot;warning: pointer to...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.