Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
|
||||||||||||||||||||||||||
1 | ||||||||||||||||||||||||||
Ошибка: error C2129: статическая функция объявлена, но не определена16.03.2017, 06:38. Показов 4294. Ответов 10
Метки нет (Все метки)
В помощь начинающим изучать C++ хочу подсказать реальную причину этой ошибки. Так как реально в интернете на форумах рассказывается какая-то ерунда по поводу того, что static дает методу работать без объявления типа. Но ошибка из-за другого…
Если у Вас есть сам метод в одном файле file.cpp:
У функции static я нашел пока два назначения: 1. Внутри класса это означает, что метод будет доступен без объявления типа переменной 2. Он служит также для определения видимости переменных и функций. Static означает, что эта функция и переменная будет видна только внутри одного файла. 1. Внутри класса:
За место static можно поставить для переменной: Для методов точно не уверен будут ли работать registr и extern. Прототип функции можно объявлять без extern - работать будут. registr – переменная будет хранится только в регистре. Позволяет не использовать оперативную память. Нужна для ускорения процессов. extern – переменная является глобальной. Помещается обычно в заголовочный файл, для того, чтобы сделать ее существующей для других файлов. Чтобы компилятор не ругался. Так как эта глобальная переменная объявляется один раз в одном cpp файле. И для каждого другого файла переменная объявляется с extern. Посмотрите мою тему по объявлению глобальных переменных. Результат работы над ошибками по поводу глобальных переменных на с++ static – переменные и методы будут видны только внутри одного файла(.cpp). На других файлах ее не существует. Именно из-за того, что новички ее используют в другом файле и чужой код копируют со значением static и потом с ужасом замечают, что код не работает. А код просто не может работать в другом файле, потому, что static делает видимость методов и переменных только для одного фала(cpp), в котором это объявлено. Это нужно, чтобы отделить методы и переменные от других фалов для уменьшения влияния переменных между файлами (ООП). Если хотите, чтобы метод был доступен в других файлах просто уберите static.
1
|
16.03.2017, 06:38 | |
Ответы с готовыми решениями:
10
Ошибка "Функция-член уже определена или объявлена" Cтатическая функция объявлена, но не определена Каким образом объявлена и определена функция на С Ошибка...функция не определена |
1355 / 854 / 365
Регистрация: 26.02.2015
Сообщений: 3,806
|
|
16.03.2017, 07:23 | 2 |
http://en.cppreference.com/w/cpp/keyword/register
Это ведь устаревшее. Вы книги, я так понимаю, не читаете?
0
|
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
|
|
16.03.2017, 07:28 [ТС] | 3 |
{deleted}
Читаю. И как это Вы определяете, что я не читаю книги? Ну тогда постарайтесь оправдать ваши высказывания. Что-за привычка, писать коротко и интриговать!?.. Сами напишите определение по русский здесь, а не кидать на английские сайты.
0
|
1355 / 854 / 365
Регистрация: 26.02.2015
Сообщений: 3,806
|
|
16.03.2017, 07:32 | 4 |
Просто манера изложения Вашего материала такова, будто вы по крупицам собираете его на просторах Интернета.
Я Вам ничем не обязан, так что будет интересно - перейдёте по ссылке.
0
|
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
|
|
16.03.2017, 08:22 [ТС] | 5 |
Для тех кто собирается создавать большие проекты с множеством фалом много чего можно подчерпнуть здесь: http://natalia.appmat.ru/C%26C%2B%2B/lezione9.php
Также описано про область видимости переменных. Написано как организовывать многофайловые коды. Именно по причине того, что много фалов взаимодействуют между собой могут возникать много ошибок у новичков. Добавлено через 2 минуты Вот главная страница этих уроков: http://natalia.appmat.ru/C&C++/
0
|
Любитель чаепитий
|
||||||||||||||||
16.03.2017, 09:39 | 6 | |||||||||||||||
А у меня не делает, стоит ли менять компилятор???
foo.hpp
0
|
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
|
||||||||||||||||
16.03.2017, 10:23 [ТС] | 7 | |||||||||||||||
У Вас это работает в режиме 1. Указал выше. Для методов в структурах и классов - static работает для того, чтобы ваш метод был доступен без объявление типа (класса или структуры)
Для методов созданных без классов и структур, static будет работать только внутри того файла(.cpp), в котором объявлен метод. Например просто вставьте:
Просто голый метод:
0
|
Любитель чаепитий
|
|
16.03.2017, 10:24 | 8 |
Вам надо бы определиться, что есть метод.
Обычно методами называют функции-члены класса, а не свободные функции... Вы же вообще все функции гребете под понятие метода.
0
|
Строитель
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 514
|
|
16.03.2017, 10:38 [ТС] | 9 |
Жаль, что существует такое мнение. Я бы хотел, чтобы такого мнения не было. Хотя это написано в книгах по C++, но про свободные методы я не видел в книге.
И все таки есть люди, которые пытаются называть все функции и процедуры одним словом: Метод Я не раз от людей слышал. Тут можно философию копать... А вот я не смог найти определения свободным процедурам и функциям. Тем более как назвать свободный метод, который будет в себе содержать и процедурные и функциональные процессы? Добавлено через 2 минуты Тут можно разделить мнением того, что функция возвращает результат, а процедура нет.
0
|
Любитель чаепитий
|
|
16.03.2017, 10:46 | 10 |
Свободными функциями я назвал обычные функции, просто чтобы они хоть как-то от функций-членов отличались. Такого понятия в реальности нет. Ну или есть, но в узких кругах.
0
|
8971 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
16.03.2017, 12:58 | 11 |
формально есть функции и функции-члены классов.
функции-члены классов делятся: статические функции-члены, не статические функции-члены. говорить каждый раз что-то вроде: "статическая функция-член класса..." - это как то длинно и долго. поэтому в общеупотребление вошли слэнговые понятия: метод - не статическая функция-член класса. статический метод - статическая функция-член класса. свободная функция (или фряха) - обычная функция, которая не имеет к классам никакого отношения.
3
|
16.03.2017, 12:58 | |
16.03.2017, 12:58 | |
Помогаю со студенческими работами здесь
11
Ошибка: функция mid не определена Ошибка fatal error LNK1561: точка входа должна быть определена ошибка:1>LINK : fatal error LNK1561: точка входа должна быть определена Предупреждение C4240. структура объявлена как private но определена как public Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |