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

Необъявленые переменные в C++- неужели такое возможно? - C++

Восстановить пароль Регистрация
 
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
10.06.2011, 23:07     Необъявленые переменные в C++- неужели такое возможно? #1
C++
1
2
3
4
5
6
7
8
9
template <class T>
class bithree {
 public:
     void pomechenie() {per= 8;};
};
 
int main() {
// bithree<int> s;
}
MSVC-ий компилятор на per= 8 не ругается; (пока не закомментишь template <class T>). Что такое?
(g++ как всегда дисциплинирован в этом смысле)

Добавлено через 57 секунд
Думал, чем чёрт не шутит, может MSVC при создании объекта ругнётся, так нет же.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
10.06.2011, 23:12     Необъявленые переменные в C++- неужели такое возможно? #2
Это пока не переменная.
Шаблон - это еще не класс. Это только "выкройка" класса. Вот при инстанцировании - огребете по полной...
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
10.06.2011, 23:30     Необъявленые переменные в C++- неужели такое возможно? #3
Шаблон — это текст, который до инстанцирования не является классом или функцией. Возможно, MSVC, в отличие от gcc, вообще не трогает шаблоны, пока те явно не использованы где-то в программе.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
10.06.2011, 23:30  [ТС]     Необъявленые переменные в C++- неужели такое возможно? #4
C++
1
2
3
4
5
6
7
8
9
template <class T>
class bithree {
 public:
     void pomechenie() {per= 8;};
};
 
int main() {
 bithree<int> s;
}
Создаю объект шаблонного класса, где определяется функция и переменная
непонятно какого типа. Не ругается.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
10.06.2011, 23:31     Необъявленые переменные в C++- неужели такое возможно? #5
Ой, опоздал.

Добавлено через 52 секунды
kravam, а вызови функцию "pomechenie()" в мейне.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
10.06.2011, 23:37     Необъявленые переменные в C++- неужели такое возможно? #6
Цитата Сообщение от kravam Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
template <class T>
class bithree {
 public:
     void pomechenie() {per= 8;};
};
 
int main() {
 bithree<int> s;
}
Создаю объект шаблонного класса, где определяется функция и переменная
непонятно какого типа. Не ругается.
Вы не вызываете метод. Значит он - не инстанцирован. Нет его!
А вот здесь - есть:
C++
1
2
bithree<int> s; 
s.pomechenie();
Тут же получаем по сусалам!
C++
1
2
3
4
5
6
7
8
9
10
11
c:\documents and settings\vv\рабочий стол\викино кубло\12345\1\1.cpp(10) : error C2065: 'per' : undeclared identifier
1>        c:\documents and settings\vv\рабочий стол\викино кубло\12345\1\1.cpp(10) : while compiling class template member function 'void bithree<T>::pomechenie(void)'
1>        with
1>        [
1>            T=int
1>        ]
1>        c:\documents and settings\vv\рабочий стол\викино кубло\12345\1\1.cpp(16) : see reference to class template instantiation 'bithree<T>' being compiled
1>        with
1>        [
1>            T=int
1>        ]
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
11.06.2011, 00:04  [ТС]     Необъявленые переменные в C++- неужели такое возможно? #7
Странно всё это.
C++
1
2
3
4
5
void f () {
 per= 89;
}
 
int main () {}
Тоже вроде ничё не вызывается, а MSVC всё равно ругается. Избирательный подход к функциям!
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
11.06.2011, 00:07     Необъявленые переменные в C++- неужели такое возможно? #8
Нет. В последнем примере - не шаблон, а функция вполне конкретная.
Медитируйте над шаблонами.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
11.06.2011, 00:08     Необъявленые переменные в C++- неужели такое возможно? #9
хреново знаю шаблоны, но по-моему они как макросы. то есть не проверяются (по крайней мере в полной степени) до подстановки в них данных
по мере надобности создается компилятором необходимая версия функции (класса) шаблона, и выполняются подстановки (как макросов) переменных
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
11.06.2011, 00:14     Необъявленые переменные в C++- неужели такое возможно? #10
OstapBender, макросы-то макросы... Только не простые, а синтаксические...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2011, 17:52     Необъявленые переменные в C++- неужели такое возможно?
Еще ссылки по теме:

динамический bitset возможно ли такое? C++
C++ Возможно ли сделать такое сокращение?
Найти такое минимально x, чтобы после выполнения кода переменные были равны заданным значениям C++

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
11.06.2011, 17:52  [ТС]     Необъявленые переменные в C++- неужели такое возможно? #11
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Нет. В последнем примере - не шаблон, а функция вполне конкретная.
Медитируйте над шаблонами.
А чё над ними медитировать?
Синтаксис какой Бог на душу положит. Тем и живём.
Yandex
Объявления
11.06.2011, 17:52     Необъявленые переменные в C++- неужели такое возможно?
Ответ Создать тему
Опции темы

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