Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Purcell
 Аватар для Purcell
0 / 0 / 0
Регистрация: 14.08.2013
Сообщений: 20
10.09.2013, 15:12     Не компилируется код с именем структуры без заглавной первой буквы #1
Почему компилятор не компилирует код с именем структуры, которое начинается со строчной буквы?

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() за переменную или поле структурной переменной? Какая тут связь?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2013, 15:12     Не компилируется код с именем структуры без заглавной первой буквы
Посмотрите здесь:

C++ Код не компилируется
C++ Не компилируется: что не так с конструктором структуры?
C++ вывести на экран все слова которые начинаются с заглавной буквы
В формате .cpp код компилируется, а в .c не компилируется C++
C++ Дана строка латинских букв. После заглавной буквы поставить вставить эту же прописную букву и наоборот
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
10.09.2013, 15:15     Не компилируется код с именем структуры без заглавной первой буквы #2
Потому что time это стандартная функция си (время возвращает). Измените имя структуры на что-нибудь другое, к примеру, mytime.
UranFlex
131 / 129 / 21
Регистрация: 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;
}
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
10.09.2013, 15:26     Не компилируется код с именем структуры без заглавной первой буквы #4
обратите внимание на то, каким цветом выделены все эти слова:
C++
1
using namespace, struct, int, void
этим же цветом окрашено слово time
C++
1
time
даже IDE пытается подсказать что все эти слова не обычные и что-то означают
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
10.09.2013, 15:27     Не компилируется код с именем структуры без заглавной первой буквы #5
Цитата Сообщение от UranFlex Посмотреть сообщение
А вот Time - уже свободно можно использовать.
Скажите это билдеру.
UranFlex
10.09.2013, 15:50
  #6

Не по теме:

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

Purcell
 Аватар для Purcell
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. То же самое.
Tulosba
10.09.2013, 17:20
  #8

Не по теме:

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

User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
10.09.2013, 17:26     Не компилируется код с именем структуры без заглавной первой буквы #9
Цитата Сообщение от Purcell Посмотреть сообщение
У меня в редакторе Vim "time" такого же цвета, как и остальные переменные и функции
Цитата Сообщение от Tulosba Посмотреть сообщение
Это же подсветка синтаксиса на форуме.
я уже понял что слово time только на форуме таким цветом выделено

Добавлено через 3 минуты
кстати, если не использовать
C++
1
using namespace std;
то все работает как надо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2013, 17:30     Не компилируется код с именем структуры без заглавной первой буквы
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
10.09.2013, 17:30     Не компилируется код с именем структуры без заглавной первой буквы #10
Если принципиально использование имени time, то можно поместить его в пространство имен.
Yandex
Объявления
10.09.2013, 17:30     Не компилируется код с именем структуры без заглавной первой буквы
Ответ Создать тему
Опции темы

Текущее время: 02:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru