0 / 0 / 0
Регистрация: 14.08.2013
Сообщений: 20
1

Не компилируется код с именем структуры без заглавной первой буквы

10.09.2013, 15:12. Показов 1247. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Почему компилятор не компилирует код с именем структуры, которое начинается со строчной буквы?

Linux (Ubuntu 12.04). Компилятор gcc, версия 4.6.3.

Запускаю код и получаю:

Код
$ g++ 09.cpp -o 09
09.cpp:16:11: ошибка: переменная или поле «swap» объявлено void
09.cpp:16:16: ошибка: expected primary-expression before «,» token
09.cpp:16:23: ошибка: expected primary-expression before «)» token
09.cpp: В функции «int main()»:
09.cpp:19:10: ошибка: expected «;» before «A»
09.cpp:20:10: ошибка: expected «;» before «B»
09.cpp:21:10: ошибка: нет декларации «A» в этой области видимости
09.cpp:21:13: ошибка: нет декларации «B» в этой области видимости
09.cpp: At global scope:
09.cpp:28:11: ошибка: переменная или поле «swap» объявлено void
09.cpp:28:17: ошибка: нет декларации «A» в этой области видимости
09.cpp:28:26: ошибка: нет декларации «B» в этой области видимости
Исходный код:

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
// 09.cpp
/* функция, меняющая значения 2-х аргументов 
   структурного типа по ссылке */
 
# include <iostream>
 
using namespace std;
////////////////////////////////////////////////////////////////////
struct time
{
    int hours;
    int minutes;
    int seconds;
};
////////////////////////////////////////////////////////////////////
void swap(time&, time&);
int main()
{
    time A = { 10, 22, 10 };
    time B = { 22, 10, 12 };
    swap(A, B);
    cout << A.hours << ":" << A.minutes << ":" << A.seconds << endl;
    cout << B.hours << ":" << B.minutes << ":" << B.seconds << endl;
    return 0;
}
//------------------------------------------------------------------
// функция
void swap(time& A, time& B)
{
    time temp;
    temp = A;
    A = B;
    B = temp;
}
Если же заменяю имя структурной переменной time на Time, то код компилируется без вывода сообщений об ошибке. Почему, когда имя структурной переменной начинается со строчной буквы, компилятор (судя по сообщению об ошибке на 16-й строке кода) принимает функцию swap() за переменную или поле структурной переменной? Какая тут связь?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2013, 15:12
Ответы с готовыми решениями:

Не компилируется код первой программы на C
Почему не компилируется код в IDE CodeBlocks? /*Выводит сообщение на экране*/ #include...

Вывести в консоль все слова из текста (без повторений) в алфавитном порядке и с заглавной буквы
object prg1 extends App{ val text = &quot;я узнал что у меня есть огромная семья и тропинка и лесок я...

Работа со списком, структуры - код не компилируется
Добрый вечер, сегодня на паре препод написал на доске, мы ничего не поняли, никто не может помочь...

[template] почему код не компилируется без конструктора
добрый вечер. вопрос поместил прямо в коде. http://rextester.com/AESO94403 #include...

9
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
10.09.2013, 15:15 2
Потому что time это стандартная функция си (время возвращает). Измените имя структуры на что-нибудь другое, к примеру, mytime.
1
134 / 132 / 51
Регистрация: 25.05.2013
Сообщений: 233
10.09.2013, 15:21 3
Прежде чем использовать слово в коде - лучше узнать
- является ли это слово зарезервированным в языке
- является ли это слово именем чего-либо из стандартной библиотеки.

time как раз второй случай. А вот Time - уже свободно можно использовать.
Но я бы использовал такое слово с какой-то приставкой.
Например:
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 <iostream>
 
using namespace std;
////////////////////////////////////////////////////////////////////
struct my_time
{
    int hours;
    int minutes;
    int seconds;
};
////////////////////////////////////////////////////////////////////
void swap(my_time&, my_time&);
int main()
{
    my_time A = { 10, 22, 10 };
    my_time B = { 22, 10, 12 };
    swap(A, B);
    cout << A.hours << ":" << A.minutes << ":" << A.seconds << endl;
    cout << B.hours << ":" << B.minutes << ":" << B.seconds << endl;
    return 0;
}
//------------------------------------------------------------------
// функция
void swap(my_time& A, my_time& B)
{
    my_time temp;
    temp = A;
    A = B;
    B = temp;
}
1
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
10.09.2013, 15:26 4
обратите внимание на то, каким цветом выделены все эти слова:
C++
1
using namespace, struct, int, void
этим же цветом окрашено слово time
C++
1
time
даже IDE пытается подсказать что все эти слова не обычные и что-то означают
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
10.09.2013, 15:27 5
Цитата Сообщение от UranFlex Посмотреть сообщение
А вот Time - уже свободно можно использовать.
Скажите это билдеру.
0
UranFlex
10.09.2013, 15:50
  #6

Не по теме:

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Скажите это билдеру.
Нету билдера, проверял на g++, при случае проверю на билдере

0
0 / 0 / 0
Регистрация: 14.08.2013
Сообщений: 20
10.09.2013, 17:14  [ТС] 7
Всем спасибо за ответы и за помощь! Это решение задачи из книги "ООП в C++" Р. Лафоре (4-е издание, 2004, издательство "Питер"). Самое интересное, что автор просит использовать структурные переменные типа time (так и написано в книге - "time"). Стр. 216, задачи 9 и 6.

Добавлено через 6 минут
Цитата Сообщение от ___ Посмотреть сообщение
даже IDE пытается подсказать что все эти слова не обычные и что-то означают
У меня в редакторе Vim "time" такого же цвета, как и остальные переменные и функции Потом я посмотрел в Gedit и в Nano. То же самое.
0
Tulosba
10.09.2013, 17:20
  #8

Не по теме:

Цитата Сообщение от ___ Посмотреть сообщение
даже IDE пытается подсказать
причем здесь IDE? Это же подсветка синтаксиса на форуме.

0
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
10.09.2013, 17:26 9
Цитата Сообщение от Purcell Посмотреть сообщение
У меня в редакторе Vim "time" такого же цвета, как и остальные переменные и функции
Цитата Сообщение от Tulosba Посмотреть сообщение
Это же подсветка синтаксиса на форуме.
я уже понял что слово time только на форуме таким цветом выделено

Добавлено через 3 минуты
кстати, если не использовать
C++
1
using namespace std;
то все работает как надо
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
10.09.2013, 17:30 10
Если принципиально использование имени time, то можно поместить его в пространство имен.
0
10.09.2013, 17:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2013, 17:30
Помогаю со студенческими работами здесь

Хеш функция, возращающая код первой буквы идентификатора
Здравствуйте. Помогите с задачей. Таблица строиться по методу цепочек с использованием...

Удвоить все буквы, стоящие в первой половине слова, а во второй оставить без изменения
Введите слово с клавиатуры. Слово состоит из четного количества букв. Необходимо удвоить все буквы,...

Ввести значение переменной к-строка. Вывести эту строку без первой и последней буквы
Ввести значение переменной к-строка. Вывести эту строку без первой и последней буквы

В строке найти и вывести на экран слово, в котором код первой буквы наибольший
Помогите написать программу: В строке найти и вывести на экран слово, в котором код первой буквы...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru