Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811

Объявление h. файла

20.01.2015, 18:10. Показов 1190. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объявил h. файл:
C++
1
2
3
4
5
6
7
#include <iostream>
 
struct dannye
{
    int s;
    string a;
};
ошибки:
Ошибка 1 error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "a" c:\projects\структуры1\структуры1\функци я.h 7 1 Структуры1
Ошибка 2 error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию c:\projects\структуры1\структуры1\функци я.h 7 1 Структуры1
если меняю структуру на такую:
C++
1
2
3
4
5
6
7
#include <iostream>
 
struct dannye
{
    int s;
    char a[5];
};
Компилится без ошибок.....непонятки почему string не принимает.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.01.2015, 18:10
Ответы с готовыми решениями:

Объявление типизированного файла
Компилятор выдает ошибку Project1.dpr(136): E2033 Types of actual and formal var parameters must be identical ( так происходит при каждом...

Объявление функции из другого файла
Мне необходимо использовать функции из другого файла. Каким образом обявить функцию в заголовочном файле и каким способом реализовать...

Компилятор ругается на объявление типизированного файла
Вот и весь сабж)

10
59 / 59 / 19
Регистрация: 13.07.2009
Сообщений: 184
20.01.2015, 18:26
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
 
using namespace std;
 
struct dannye
{
    int s;
    string a;
};
 
int main()
{
   return 0;
}
0
 Аватар для SuurKissat
34 / 34 / 16
Регистрация: 11.01.2015
Сообщений: 130
20.01.2015, 18:27
Не уверен, но попробуй
C++
1
2
3
4
5
6
7
#include <iostream>
 
struct dannye
{
    int s;
    std::string a;
};
0
 Аватар для cooller
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
20.01.2015, 21:30
Цитата Сообщение от eagl69 Посмотреть сообщение
2
3
4
5
6
7
#include <iostream>
struct dannye
{
* * int s;
* * string a;
};
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include<string>
 
struct dannye
{
    int s;
    std::string a;
};
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
20.01.2015, 23:32
eagl69, Пара пояснений к предыдущему посту. string не является встроенным типом ни Си, ни Си++. Это класс. И чтобы транслятор понимал, с чем он имеет дело, ему необходимо увидеть объявление этого класса. Без этого объявления слово string для него является просто набором букв. Этот набор букв по контексту не может быть идентификатором, вот обезумевший транслятор и лепит тебе ошибки. Определить ее смысл он не в силах (откуда ему знать, что ты не подключил нужный хедер?), но то, что это ошибка - знает навярняка. (ибо синтаксической ошибкой является все, чего он не понимает). На код
C++
1
2
3
4
struct dannye {
    int s;
    blabla a;
};
он отреагирует абсолютно также.
А подключать надо <cstring.h> или что там эквивалентно в твоей среде. Скорее всего <iostream> подключает и данный хедер .
0
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811
21.01.2015, 06:57  [ТС]
Помогло std::string a; кстати без

#include <iostream>
#include<string>

Добавлено через 20 минут
Усовершенствовал программку:
main файл:
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
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include<thread> //Файл в котором определен класс thread 
#include <mutex>
#include <string>
#include <vector>
#include "Структуры.h"
#include "Функция.h"
 
using namespace std;
 
int _tmain()
{
    vector<dannye> obyekt(10);
    obyekt[0].s = 1;
    obyekt[1].s = 5;
    obyekt[2].s = 7;
    obyekt[1].a = "lklklk";
    for (int z = 0; z < 10; ++z)
    {
        cout << " s= " << obyekt[z].s;
    }
    cout << obyekt[1].a << endl;
    thread funkcyi_(funkcyi, &obyekt);
    Sleep(100);
    cout << obyekt[0].s << endl;
    Sleep(100000);
    return 0;
}
файл Структуры.h
C++
1
2
3
4
5
struct dannye
{
    int s;
    std::string a;
};
файл Функция.h
C++
1
2
3
#pragma once
 
int funkcyi(vector<dannye> *obyekt1);
и файл Функция.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include<thread> //Файл в котором определен класс thread 
#include <mutex>
#include <string>
#include <vector>
#include "Структуры.h"
 
int funkcyi(vector<dannye> *byekt1)
{
    obyekt1[0].s = 56;
    return 0;
}
Хочу изменять данные в векторе в отдельном потоке, но выдает кучу ошибок вот например:
Ошибка 1 error C2065: vector: необъявленный идентификатор c:\projects\структуры_2\структуры_2\функ ция.cpp 10 1 Структуры_2
Ошибка 2 error C2065: dannye: необъявленный идентификатор c:\projects\структуры_2\структуры_2\функ ция.cpp 10 1 Структуры_2
Что я не так делаю......

Добавлено через 31 минуту
Одну ошибку нашел, надо добавлять std::
Функция.cpp теперь такая:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include<thread> //Файл в котором определен класс thread 
#include <mutex>
#include <string>
#include <vector>
#include "Структуры.h"
 
using namespace std;
 
int funkcyi(vector<dannye> *byekt1)
{
    (*obyekt1)[0].s = 56;
    return 0;
}
но вот опять беда: Ошибка 1 error C2065: obyekt1: необъявленный идентификатор c:\projects\структуры_2\структуры_2\функ ция.cpp 14 1 Структуры_2
0
 Аватар для Pancir
59 / 46 / 11
Регистрация: 16.09.2014
Сообщений: 124
21.01.2015, 07:13

Не по теме:

Вы теперь по каждой очевидной опечатке будете вопрос задавать? Может стоит немного уже самому начать пытаться разбираться в ваших проблемах, а не бежать при каждой ошибке на форум?



имя аргумента в функции byekt1 в теле функции вы пишите имя obyekt1, конечно "тело функции ничего не знает" об obyekt1
1
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811
21.01.2015, 11:37  [ТС]
Блин извиняюсь за невнимательность, глаз замылился..... а h. файл пришлось тоже изменить:
C++
1
2
3
4
#pragma once
using namespace std;
 
int funkcyi(vector<dannye> *obyekt1);
Добавлено через 11 минут
Ну и для защиты от так называемых гонок я сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int _tmain()
{
    vector<dannye> obyekt(10);
    mutex obyekt_mutex;
    obyekt[0].s = 1;
    obyekt[1].s = 5;
    obyekt[2].s = 7;
    obyekt[1].a = "lklklk";
    
    for (int z = 0; z < 10; ++z)
    {
        cout << " s= " << obyekt[z].s << " a= " << obyekt[z].a << endl;
    }
    
    thread funkcyi_(funkcyi, &obyekt, &obyekt_mutex);
    Sleep(100);
    obyekt_mutex.lock();
    cout << obyekt[0].s << endl;
    obyekt_mutex.unlock();
    Sleep(100000);
    return 0;
}
и
C++
1
2
3
4
5
6
7
int funkcyi(vector<dannye> *byekt1, mutex *obyekt_mutex)
{
    (*obyekt_mutex).lock();
    (*byekt1)[0].s = 100;
    (*obyekt_mutex).unlock();
    return 0;
}
Это правильный подход?

Добавлено через 3 часа 48 минут
Ну и еще один вопрос, а как сделать так, чтобы главная функция ждала когда в потоке будут внесены изменения в вектор и после этого только выводила на печать результат?
C++
1
2
3
4
5
6
7
thread funkcyi_(funkcyi, &obyekt, &obyekt_mutex);
Sleep(100); //я так понимаю вместо sleep
obyekt_mutex.lock();
 cout << obyekt[0].s << endl;
obyekt_mutex.unlock();
 Sleep(100000);
 return 0;
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
21.01.2015, 13:19
Цитата Сообщение от eagl69 Посмотреть сообщение
Ну и еще один вопрос, а как сделать так, чтобы главная функция ждала когда в потоке будут внесены изменения в вектор и после этого только выводила на печать результат?
eagl69, http://en.cppreference.com/w/c... hread/join
0
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811
21.01.2015, 13:26  [ТС]
join не подойдет
поток я так сказать отсоеденил
C++
1
2
thread funkcyi_(funkcyi, &obyekt, &obyekt_mutex);
    funkcyi_.detach();
код функции потока:
C++
1
2
3
4
5
6
7
8
9
int funkcyi(vector<dannye> *byekt1)
{
    
while(true)
{
cin >> (*obyekt1)[0].s ;
};
    return 0;
}
Добавлено через 6 минут
а маин вот:
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
int _tmain()
{
    setlocale(LC_ALL, "Russian");
    vector<dannye> obyekt(10);
    mutex obyekt_mutex;
    obyekt[0].s = 1;
    obyekt[1].s = 5;
    obyekt[2].s = 7;
    obyekt[1].a = "lklklk";
    
    for (int z = 0; z < 10; ++z)
    {
        cout << " s= " << obyekt[z].s << " a= " << obyekt[z].a << endl;
    }
    
    thread funkcyi_(funkcyi, &obyekt, &obyekt_mutex);
    funkcyi_.detach();
while(true)
{   
// здесь надо ждать.....
    obyekt_mutex.lock();
    cout << " obyekt[0].s= " << obyekt[0].s << endl;
    obyekt_mutex.unlock();
};
    Sleep(100000);
    return 0;
}
0
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,893
21.01.2015, 13:57
eagl69, тогда глядите в сторону std::condition_variable
std::condition_variable
C++11 threads, locks and condition variables
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2015, 13:57
Помогаю со студенческими работами здесь

ОБЪЯВЛЕНИЕ
Уважаемые форумяне! Раздел контекстной рекламы получил 3 подраздела: - Бегун - РСЯ - AdSense Теперь открываем темы...

Объявление
Создать сценарий, который составляет и выводит объявление о занятии факультатива по информатике с датой (12, 15, 17), месяцем (марта,...

Объявление конструктора
Изучаю книгу Джосьютиса по STL и столкнулся с немного непонятным объявлением конструктора. Помогите разобраться, правильно ли я его...

Объявление массива
Как объявить массив следующего типа: A d] т.е. массив A, в котором N элементов (индекс i), содержащие объекты byte (массив байт...

Автоматическое объявление
Напишите программу, которая делает автоматические объявления в крупном магазине. Объявление собирается из заранее записанных частей. ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru