Основные методы в C ++ в разных файлах классов?

0

В Java у каждого класса может быть свой собственный основной метод, но когда я попытался создать два файла cpp в C++, оба с их собственными основными методами, компилятор сказал мне, что основная часть уже определена. Означает ли это, что мне нужен новый проект для каждого основного метода? Я следую учебному курсу C++, и я не хочу создавать новый проект для каждой примерной программы, которую мы делаем, мне просто нужен один проект с несколькими основными методами. Это возможно?

  • 3
    В C ++ нет понятия «проект». Вам нужен main() для каждого исполняемого файла. Вот и все.
  • 1
    Это более специфично для идеала. Пожалуйста, дайте нам знать, какой ide вы используете.
Показать ещё 5 комментариев
Теги:
visual-studio

3 ответа

2
Лучший ответ

У вашего .cpp нет "методов", возможно, что вы определили свободные функции (т.е. процедуры, не связанные с каким-либо классом), и все они находятся в одном и том же пространстве имен. Это, конечно, дает ошибки на этапе связывания, так как вы многократно определяете одно и то же.

Если вы хотите определить класс, вы можете использовать ключевое слово class; конечно, в этом случае, как и в Java, каждый класс, который вы определяете, может иметь свой собственный main метод.

Я следую учебному курсу C++, и я не хочу создавать новый проект для каждой примерной программы, которую мы делаем, мне просто нужен один проект с несколькими основными методами. Это возможно?

Нет. Точка входа - это всего лишь одна глобальная main функция. Если вы хотите разрешить несколько возможных "подпрограмм", напишите каждый из них в отдельной функции и решите, какой из них вызывать из одного main.

  • 0
    Хорошо, я думаю, что теперь понимаю. В Java у вас может быть один проект с несколькими основными функциями, но C ++ вообще так не работает?
1

В C# каждый проект имеет свой собственный файл Program.cs, который является точкой входа. Если вы объединяете несколько проектов, тривиально, чтобы сообщить Visual Studio о компиляции в виде библиотеки и выбрать, какую точку входа в проект использовать.

В C++ вы можете иметь только одно определение main в глобальном пространстве имен. Например, у вас есть свой собственный основной объект в пространстве имен, который ::main вызовет. Этот метод выполняется в SDL, например, так что пользователю не нужно создавать main, и он может связывать -lSDL_main.

0

В MS Visual Studio одно "решение" (файл.sln) будет содержать несколько "проектов". Каждый исполняемый файл, который вы хотите создать, будет иметь свой собственный "проект", и вы можете иметь много таких проектов в одном и том же "решении". Не каждый "проект" должен создавать исполняемый файл, хотя часто "проект" просто создает библиотеку, например библиотеку общих утилит, которую могут включать многие ваши исполняемые файлы. Когда вы помещаете два проекта "main()" в два.cpp файла в одном проекте, компилятор должен скомпилировать оба файла.cpp в.obj файлы, а затем, вероятно, попытался создать один исполняемый файл с обоими.obj файлами, связанными с исполняемый файл. И вы получите сообщение об ошибке, когда компоновщик попытается поместить обе функции "main()" в один и тот же исполняемый файл, так как вы не можете иметь две точки входа с тем же именем.

То, что говорит Маттео о классах и методах, тоже нужно понять.

  • 0
    Ах я вижу. То есть решение может содержать несколько «проектов»? Но «проект» не может содержать более одного класса с основным методом? Я понял это сейчас, я думаю.
  • 0
    @ opiop65 Вы не полностью поняли. main функция, на которую вы ссылаетесь (т.е. точка входа в исполняемый файл), не находится в классе. Это бесплатная функция, объявленная в глобальном пространстве имен. У вас может быть столько классов, сколько вы хотите, с функциями, называемыми main , и они будут совершенно не связаны друг с другом и не связаны с функцией точки входа main . Я думаю, что вы сбиты с толку, потому что вы пришли с Java. В C ++ вам не нужно иметь класс, чтобы иметь функцию.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню