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

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

Войти
Регистрация
Восстановить пароль
 
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
#1

компилятор ругается на структуру - C++

06.08.2010, 14:05. Просмотров 900. Ответов 11
Метки нет (Все метки)

попалась вот такая вот структура для графа, но компилятору она не нравится....

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <class V, class E>
struct graph 
{
    struct v_info;
    struct e_info;
 
    struct v_info
    {
        V i;
        list <e_info> *e;
    };
    struct e_info
    {
        E i;
        list <v_info> *v};
    };
    list <v_info> *v;
};
ошибки выдаёт типа таких :
Error 1 error C2143: syntax error : missing ';' before '<' c:\Documents and Settings\1\Мои документы\Visual Studio 2008\Projects\graph\graph\graph.cpp 10
Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\Documents and Settings\1\Мои документы\Visual Studio 2008\Projects\graph\graph\graph.cpp 10
Error 3 error C2238: unexpected token(s) preceding ';' c:\Documents and Settings\1\Мои документы\Visual Studio 2008\Projects\graph\graph\graph.cpp 10
Error 4 error C2143: syntax error : missing ';' before '<' c:\Documents and Settings\1\Мои документы\Visual Studio 2008\Projects\graph\graph\graph.cpp 15
может какую библиотеку надо подключить?? (у меня подключены iostream и stdio.h)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2010, 14:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос компилятор ругается на структуру (C++):

ругается компилятор: - C++
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;process.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; float a,b; ...

Компилятор ругается - C++
Условие Создать класс, содержащий сведения о количестве изделий, собранный сборщиками цеха за неделю. Класс должен содержать следующие...

Ругается компилятор - C++
Создать класс жидкость, имеющий название (указатель на строку), плотность. Определить конструкторы, деструктор и операторы вывода в поток....

Ругается компилятор - C++
Компилирую программу: // Proba2.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include &lt;vector&gt;...

Компилятор не ругается - C++
Компилятор по разному реагирует на 2 указателя на строки (см.комментарии). В связи с этим появился вопрос - где хранятся аргументы...

Компилятор ругается на USHORT * - C++
USHORT * pInt = new USHORT; Чего это он? 1&gt;d:\проги\указателя\указателя\указателя.cpp(48): error C2065: USHORT: необъявленный...

11
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
06.08.2010, 14:10 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <class V, class E>
struct graph 
{
    struct v_info;
        struct e_info;
 
        struct v_info
        {
                V i;
                std::list <e_info> *e;
        };
        struct e_info
        {
                E i;
                std::list <v_info> *v;
        };
        std::list <v_info> *v;
};
Так работает?
0
Aaxenon
Light Knight
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
06.08.2010, 14:10 #3
тут синтаксические ошибки, попробуйте почитать их и исправить как надо
0
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
06.08.2010, 14:15  [ТС] #4
спасибо)

ошибки синтаксические, но если их почитать, то там бредятина.... перед <v_info> явно не нужна ";" а он требует....

Добавлено через 3 минуты
хотя добавление std:: тоже ничего не изменило...
0
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
06.08.2010, 14:25 #5
У меня нет ошибок из кода в первом сообщении.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <class V, class E>
struct graph 
{
        struct v_info
        {
            friend struct e_info;
                V i;
                std::list <e_info> e;
        };
        struct e_info
        {
                E i;
                std::list <v_info> *v;
        };
        std::list <v_info> *v;
};
Воспользуйтесь friend.
Где у вас ошибка в какой строчке?
0
Nick Alte
Эксперт С++
1640 / 1012 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
06.08.2010, 14:51 #6
Конкретизировать шаблон типом, который только объявлен, но не определён, нельзя. Так что писать list<e_info> недопустимо. Само наличие такой перекрёстной зависимости между двумя типами - серьёзный повод задуматься о допущенных ошибках проектирования.
0
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
06.08.2010, 14:54  [ТС] #7
при такой структуре ошибок меньше но всё равно есть...
он требует чтобы перед <v_info> и <e_info> стояла ";"
и в строчках где написано <v_info> и <e_info> вот такая ошибка:
Error 5 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Добавлено через 1 минуту
Цитата Сообщение от Nick Alte Посмотреть сообщение
Конкретизировать шаблон типом, который только объявлен, но не определён, нельзя. Так что писать list<e_info> недопустимо. Само наличие такой перекрёстной зависимости между двумя типами - серьёзный повод задуматься о допущенных ошибках проектирования.
а что тогда сделать?? записать всё это как отдельные 2 структуры??
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
06.08.2010, 15:04 #8
Цитата Сообщение от Flamе Посмотреть сообщение
попалась вот такая вот структура для графа, но компилятору она не нравится....

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <class V, class E>
struct graph 
{
    struct v_info;
    struct e_info;
 
    struct v_info
    {
        V i;
        list <e_info> *e;
    };
    struct e_info
    {
        E i;
        list <v_info> *v};
    };
    list <v_info> *v;
};
ошибки выдаёт типа таких :


может какую библиотеку надо подключить?? (у меня подключены iostream и stdio.h)
В строке 15 нужно убрать фигурную скобку перед точкой с запятой. После этого все работает.
0
Nick Alte
Эксперт С++
1640 / 1012 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
06.08.2010, 15:16 #9
Действительно. Похоже, компилятору удаётся сообразить что к чему и нормально инстанциировать list. Ну тем лучше.
0
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
06.08.2010, 15:29  [ТС] #10
вот блин, такая глупая опечатка.... но всё равно не пашет.... не понимает он строчки типа этой: "list <v_info> *v"
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
06.08.2010, 15:33 #11
Цитата Сообщение от Flamе Посмотреть сообщение
вот блин, такая глупая опечатка.... но всё равно не пашет.... не понимает он строчки типа этой: "list <v_info> *v"
А #include <list> не забыли?
0
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
06.08.2010, 17:13  [ТС] #12
Цитата Сообщение от Mr.X Посмотреть сообщение
А #include <list> не забыли?
о да, как раз её и не было))) теперь всё работает)) надо запомнить эту библиотеку)))) спасибо!!!))
0
06.08.2010, 17:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2010, 17:13
Привет! Вот еще темы с ответами:

Компилятор ругается на strrev - C++
Подключил cstring, все равно онлайн Ideone и Shell не понимают strrev().

Компилятор ругается на цикл for - C++
Есть код: #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;sstream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;iterator&gt; ...

Компилятор ругается на fopen - C++
#include&lt;iostream&gt; #include&lt;stdio.h&gt; #include &lt;string.h&gt; #define MAX 50 using namespace std; // Приоритет операций int...

Почему ругается компилятор - C++
#include &lt;iostream&gt; using namespace std; int main() { int a; cin.get(a); system(&quot;pause&quot;); }


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

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

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