Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Defake
4 / 4 / 4
Регистрация: 24.08.2011
Сообщений: 191
#1

Последовательность директив #include при работе со списками структур - C++

14.10.2014, 01:51. Просмотров 662. Ответов 4
Метки нет (Все метки)

Компилятор выдает лог:
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(2): error C2146: syntax error : missing ';' before identifier 'persons'
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(2): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(6): error C2065: 'List' : undeclared identifier
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(6): error C2065: 'skills' : undeclared identifier
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(6): error C2065: 'db' : undeclared identifier
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(6): error C2182: 'fillSkillTable' : illegal use of type 'void'
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(7): error C2065: 'List' : undeclared identifier
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(7): error C2065: 'list' : undeclared identifier
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(7): error C2062: type 'char' unexpected
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillssort.cpp(68): error C2064: term does not evaluate to a function taking 2 arguments
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillssort.cpp(117): error C2039: 'persons' : is not a member of 'SkillNode'
1> d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(1) : see declaration of 'SkillNode'
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillssort.cpp(117): error C2228: left of '.head' must have class/struct/union
1> SkillModule.cpp
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(2): error C2146: syntax error : missing ';' before identifier 'persons'
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(2): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(6): error C2065: 'List' : undeclared identifier
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(6): error C2065: 'skills' : undeclared identifier
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(6): error C2065: 'db' : undeclared identifier
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(6): error C2182: 'fillSkillTable' : illegal use of type 'void'
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(7): error C2065: 'List' : undeclared identifier
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(7): error C2065: 'list' : undeclared identifier
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(7): error C2062: type 'char' unexpected
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.cpp(7): error C2365: 'fillSkillTable' : redefinition; previous definition was 'data variable'
1> d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(6) : see declaration of 'fillSkillTable'
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.cpp(12): error C3861: 'isSkillInList': identifier not found
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.cpp(15): error C2039: 'persons' : is not a member of 'SkillNode'
1> d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(1) : see declaration of 'SkillNode'
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.cpp(16): error C2039: 'persons' : is not a member of 'SkillNode'
1> d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(1) : see declaration of 'SkillNode'
1>d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.cpp(22): error C2039: 'persons' : is not a member of 'SkillNode'
1> d:\programming\visualstudio\projects\skillssort\skillssort\skillmodule.h(1) : see declaration of 'SkillNode'
1> Generating Code...
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Как я понял, все ошибки - это следствие первых двух. Только вот неясно, что именно он имеет в виду про отсутствующую ;
И вторую тоже не очень понимаю. Списки List реализованы вручную написанной структурой

Вот код заголовка библиотеки:
C++
1
2
3
4
5
6
7
struct SkillNode {
    List persons;
    char* name;
};
 
void fillSkillTable(List &skills, List &db);
bool isSkillInList(List &list, char* item);
И первая и вторая ошибки указывают на строку объявления списка
List persons;

Вот код cpp файла:

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
#include "stdafx.h"
#include "SkillModule.h"
#include "ListModule.h"
#include "RecordsModule.h"
 
/* Record the skills into the skill table */
void fillSkillTable(List& skills, List& db) {
    Node* currentNode = db.head;
    while (currentNode) {
        Node* currentSkill = (((Record*)(currentNode->data))->skills).head;
        while (currentSkill) {
            if (!isSkillInList(skills, (char*)(currentSkill->data))) {
                SkillNode* newSkill = new SkillNode;
                newSkill->name = (char*)(currentSkill->data);
                listInit(newSkill->persons);
                addToList(newSkill->persons, currentNode);
                addToList(skills, newSkill);
            } else {
                Node* curSkill = skills.head;
                while (curSkill) {
                    if (((SkillNode*)(curSkill->data))->name == currentSkill->data) {
                        addToList(((SkillNode*)(curSkill->data))->persons, currentNode);
                    }
                    curSkill = curSkill->nextItem;
                }
            }
            currentSkill = currentSkill->nextItem;
        }
        currentNode = currentNode->nextItem;
    }
}
 
bool isSkillInList(List &list, char* item) {
    Node* currentNode = list.head;
    while (currentNode) {
        if (((SkillNode*)(currentNode->data))->name == item)
            return true;
        else
            currentNode = currentNode->nextItem;
    }
    return false;
}
В чем проблема? Что не так в этой структуре?
http://www.cyberforum.ru/cpp-beginners/thread1381515.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2014, 01:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Последовательность директив #include при работе со списками структур (C++):

Проблемма при работе с массивами структур
Разработать программу , позволяющую добавлять данные структур с указанными...

Ошибка при работе с массивом структур
Доброго времени суток. Есть массив структур readfuturestudents. Из него...

Работа с файлами в C# с исп. библиотек #include <stdio.h> #include <stdlib.h> #include <math.h> #include <io.h>
В типизированном файле записаны названия городов и их численность. Увеличить...

#include<iostream>// подключение библиотек #include <conio.h> #include <climits>
помогите для этой программы сделать блок-схему. Пожалуйста ...

В чем суть директив #include <Windows.h> #include <stdlib.h>
/*хочу сделать простую графическую программу ранее работал с turbo 3.0 я так...

4
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
14.10.2014, 01:57 #2
тип List не определен.
0
Defake
4 / 4 / 4
Регистрация: 24.08.2011
Сообщений: 191
14.10.2014, 02:03  [ТС] #3
stima, заголовочный файл библиотеки ListModule.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct Node {
    void* data;
    Node* prevItem;
    Node* nextItem;
};
 
struct List {
    Node* head;
    Node* tail;
};
 
void addToList(List &list, void* item);
 
void deleteLast(List &list);
 
void recordsListOutput(List &list);
 
void charsListOutput(List &list, char separator);
 
void listInit(List &list);
0
ViktorB
43 / 43 / 12
Регистрация: 06.10.2014
Сообщений: 133
14.10.2014, 04:03 #4
Лучший ответ Сообщение было отмечено Defake как решение

Решение

Defake, вам ответил stima, но вы не разобрались.
Суть в том, что заголовок SkillModule.h включен в CPP файл ДО заголовка ListModule.h. В заголовке SkillModule.h определяется структура, в которой используется ваш тип List. Но определение типа List находится в заголовке ListModule.h. Т.е. вы пытаетесь использовать List до того как вы его определили.
Цитата Сообщение от Defake Посмотреть сообщение
C++
1
2
3
4
#include "stdafx.h"
#include "SkillModule.h"
#include "ListModule.h"
#include "RecordsModule.h"
Смотрите, в какой последовательности препроцессор добавит заголовки в CPP файл, когда встретит директивы #include "SkillModule.h" и #include "ListModule.h":
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Содержимое SkillModule.h
struct SkillNode {
    List persons; // <-- Уже используется тип List, но он определен позже. Вот компилятор и говорит, что не знает что такое List.
    char* name;
};
 
// Содержимое ListModule.h
void fillSkillTable(List &skills, List &db);
bool isSkillInList(List &list, char* item);
struct Node {
    void* data;
    Node* prevItem;
    Node* nextItem;
};
 
struct List {  // <-- Вот где определен тип List, с этого момента компилятор знает его.
    Node* head;
    Node* tail;
};
 
//...
1
Defake
4 / 4 / 4
Регистрация: 24.08.2011
Сообщений: 191
14.10.2014, 17:36  [ТС] #5
ViktorB, сначала не помогло и думал опять сюда писать) А потом увидел, что в мейне тоже неправильно стоят инклуды. И главное, я же их именно переставлял, когда исправлял ошибки. Но переставил неправильно)) Спасибо!
0
14.10.2014, 17:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2014, 17:36
Привет! Вот еще темы с решениями:

Автоматическое добавление директив #include
Добрый день вопрос следующий: Можно ли в VS 13 , как-то так сделать , чтобы при...

как увеличить скорость при работе с большими списками?
задача найти сумму медиан каждой подпоследовательности длины i для всех i=1,n...

Последовательность при работе с TDde
Здравствуйте! Дело вот в чём: есть приложение, которое в режиме реального...

Нераспознанная управляющая последовательность при работе с путями
Доброго времени суток! Делая программу, столкнулся с такой проблемой: ...


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

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

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