В Java у каждого класса есть свой собственный основной метод, но когда я попытался создать два cpp-файла на C++, оба с их собственными основными методами, компилятор сказал мне, что main уже определен. Означает ли это, что мне нужен новый проект для каждого основного метода? Я следую учебному курсу на C++, и я не хочу создавать новый проект для каждой примерной программы, я просто хочу, чтобы один проект имел несколько основных методов. Это возможно?Основные методы в C++ в разных файлах классов?
ответ
У вашего .cpp
нет «методов», возможно, что вы определили свободные функции (т. Е. Процедуры, не связанные с каким-либо классом), и все они находятся в одном и том же пространстве имен. Это, конечно, дает ошибки на этапе связывания, так как вы многократно определяете одно и то же.
Если вы хотите определить класс, вы можете использовать ключевое слово class
; конечно, в этом случае, как и в Java, каждый класс, который вы определяете, может иметь свой собственный метод main
.
Я следую учебному курсу на C++, и я не хочу создавать новый проект для каждой примерной программы, которую мы делаем, мне просто нужен один проект с несколькими основными методами. Это возможно?
№. Точка входа - всего одна - глобальная функция main
. Если вы хотите разрешить несколько возможных «подпрограмм», напишите каждый из них в отдельной функции и определите, какой из них нужно вызвать из одного main
.
Хорошо, думаю, теперь я понимаю. В Java у вас может быть один проект с несколькими основными функциями, но C++ вообще не работает? –
В MS Visual Studio одно «решение» (файл .sln) будет содержать несколько «проектов». Каждый исполняемый файл, который вы хотите создать, будет иметь свой собственный «проект», и вы можете иметь много таких проектов в одном и том же «решении». Не каждый «проект» должен создавать исполняемый файл, хотя часто «проект» просто создает библиотеку, например библиотеку общих утилит, которую могут включать многие ваши исполняемые файлы. Когда вы помещаете два проекта «main()» в два .cpp-файла в одном проекте, компилятор должен скомпилировать оба файла .cpp в .obj-файлы, а затем, вероятно, попытался создать один исполняемый файл с обоими .obj-файлами, связанными с исполняемый файл. И вы получите сообщение об ошибке, когда компоновщик попытается поместить обе функции «main()» в один и тот же исполняемый файл, так как вы не можете иметь две точки входа с тем же именем.
Что говорит Маттео о классах и методах, вы также должны понимать.
А, я вижу. Таким образом, решение может содержать несколько «проектов»? Но «проект» не может содержать более одного класса с основным методом? Я понимаю, думаю. –
@ opiop65 Вы еще не поняли полностью. Функция 'main', на которую вы ссылаетесь (т. Е. Точка входа в исполняемый файл), не живет в классе. Это свободная функция, объявленная в глобальном пространстве имен. Вы можете иметь столько классов, сколько хотите, с функциями, называемыми 'main', и они будут полностью не связаны друг с другом и не связаны с функцией entrypoint,' main'. Я думаю, вы сбиты с толку, потому что вы пришли с Java. В C++ вам не нужно иметь класс, чтобы иметь функцию. – JBentley
Так как же компилятор выбирает правильную «главную» функцию? Моя книга также рассказала мне, что вы только что сказали, что я могу иметь несколько функций с идентификатором «main», но как это работает? –
В C#
каждый проект имеет свой собственный файл Program.cs
, который является точкой входа. Если в итоге вы комбинируете несколько проектов, тривиально сообщить Visual Studio, чтобы они скомпилировали его как библиотеку, и выберите точку входа проекта.
В C++
вы можете иметь только одно определение main
в глобальном пространстве имен. Например, у вас есть свой собственный основной объект в пространстве имен, которое вызовет ::main
. Например, этот метод выполняется в SDL, так что пользователю не нужно самостоятельно создавать main
, и он может связать -lSDL_main
.
- 1. Написание классов в разных файлах в C++
- 2. Заголовок, определения функций, основные в разных файлах
- 3. Доступ к массиву в файлах разных классов
- 4. C# Основные методы оптимизации
- 5. Методы из разных классов дважды
- 6. Переопределения методы из разных классов в Java
- 7. Objective-C частичная реализация классов в отдельных файлах
- 8. Объявление метода в файлах классов
- 9. Основные методы метапрограммирования в Scalla
- 10. Регистрация в нескольких файлах журналов из разных классов в Python
- 11. C# несколько классов в отдельных файлах?
- 12. Несколько классов в нескольких файлах - C++/Arduino
- 13. Анимация в файлах классов?
- 14. PhpStorm - методы и переменные распечатки в файлах классов
- 15. Карта методов из разных классов в C++
- 16. C++ Классы в разных файлах выпуска
- 17. полученных clases в разных файлах C++
- 18. C# checkBox_CheckedChanged Ссылка в разных файлах
- 19. C++ Наследование в разных файлах ошибка
- 20. методы импорта и использования среди разных классов?
- 21. Методы вызова из разных классов | Java
- 22. функция указатель на методы разных классов
- 23. Как разделить код классов в разных SWF-файлах?
- 24. Агрегация не работает при написании классов в разных файлах
- 25. Swift: access Переменные из других классов в разных быстрых файлах
- 26. Java: собственные методы классов с одинаковыми именами в разных пакетах
- 27. log4net в разных файлах
- 28. Socket.io в разных файлах
- 29. Делегат, использующий разные методы разных классов
- 30. Как запустить методы testNG из разных классов в последовательном порядке
В C++ нет понятия «проект». Для каждого исполняемого файла требуется 'main()'. Вот и все. – juanchopanza
Это более специфично. Пожалуйста, сообщите нам, какой идеал вы используете. –
Является ли проект «решением» тогда? В визуальной студии это то, что она называет, я понятия не имею, является ли это конвенцией или нет ... –