ошибка LNK2019: неразрешенный внешний символ _main, указанный в функции ___tmainCRTStartup
Я не знаю, что в этом плохого. Я не могу найти, где ошибка, комментируя реализацию, также не разрешает ошибку.
Файл заголовка
#ifndef MAIN_SAVITCH_SEQUENCE_H #define MAIN_SAVITCH_SEQUENCE_H #include // Provides size_t namespace main_savitch_3 { class sequence { public: // TYPEDEFS and MEMBER CONSTANTS typedef double value_type; typedef std::size_t size_type; static const size_type CAPACITY = 30; // CONSTRUCTOR sequence( ); // MODIFICATION MEMBER FUNCTIONS void start( ); void advance( ); void insert(const value_type& entry); void attach(const value_type& entry); void remove_current( ); // CONSTANT MEMBER FUNCTIONS size_type size( ) const; bool is_item( ) const; value_type current( ) const; private: value_type data[CAPACITY]; size_type used; size_type current_index; }; } #endif
Источник
- Шаблон C ++, ссылка на ошибку
- Как принудительно включить определение «неиспользуемых» объектов в библиотеке
- Как использовать OpenSSL в GCC?
- Могу ли я смешивать статические и общедоступные библиотеки при связывании?
- ошибка LNK2005: уже определена - C ++
#include "sequence1.h" #include namespace main_savitch_3 { // Default constructer - sequence is empty sequence::sequence() { used = current_index = 0; } // Start the iteration void sequence::start() { current_index = 0; } // Iterate void sequence::advance() { current_index++; } // Number of items in the sequence sequence::size_type sequence::size() const { return used; } // Checks if there is a current item bool sequence::is_item() const { return current_index 0; } // Returns the current value sequence::value_type sequence::current() const { assert(is_item()); // no current item return data[current_index]; } // Adds an item BEFORE the current index void sequence::insert(const value_type& entry) { assert(entry != 0); // pointer is invalid assert(current_index = current_index; i--) data[i + 1] = data[i]; data[current_index] = entry; } // Adds an item AFTER the current index void sequence::attach(const value_type& entry) { assert(entry != 0); // pointer is invalid assert(current_index current_index; i--) data[i + 1] = data[i]; if (current_index = 0) data[used] = entry; else data[current_index + 1] = entry; } // Removes the current item void sequence::remove_current() { for (size_type i = current_index; i < used; i++) data[i] = data[i + 1]; } }
- Почему при использовании шаблонов я получаю ошибки «неразрешенных внешних символов»?
- Почему фатальная ошибка «LNK1104: невозможно открыть файл« C: \ Program.obj »возникает при компиляции проекта C ++ в Visual Studio?
- Почему компиляторы настолько глупы?
- Что означает «статически связанное» и «динамически связанное»?
- Как C ++-связь работает на практике?
- Порядок инициализации статических переменных
- Передача gcc непосредственно для связывания библиотеки статически
- Определение переменной в файлах заголовков
Даже если ваш проект имеет метод main()
, компоновщик иногда путается. Вы можете решить эту проблему в Visual Studio 2010, выбрав
Project -> Свойства -> Свойства конфигурации -> Linker -> System
и изменение SubSystem
на консоль.
У нас также была эта проблема. Мой коллега нашел решение. Это оказалось переопределение «основного» в заголовке третьей стороны библиотеки:
#define main SDL_main
Таким образом, решение заключалось в том, чтобы добавить:
#undef main
перед нашей основной функцией.
Это явно глупость!
если у вас есть функция _tmain
в ваших проектах, вам нужно include
Вам нужна функция main()
поэтому программа знает, с чего начать.
В случае, если кто-то пропустил очевидное; обратите внимание: если вы создадите приложение GUI и
« -subsystem: windows » в link-args, запись приложения – WinMain @ 16 . Не main () . Следовательно, вы можете использовать этот fragment для вызова своего основного () :
#include #include #ifdef __GNUC__ #define _stdcall __attribute__((stdcall)) #endif int _stdcall WinMain (struct HINSTANCE__ *hInstance, struct HINSTANCE__ *hPrevInstance, char *lpszCmdLine, int nCmdShow) { return main (__argc, __argv); }
Вы реализовали функцию main()
?
int main(int argc, char **argv) { ... code ... return 0; }
[редактировать]
У вас есть main()
в другом исходном файле, поэтому вы, вероятно, забыли добавить его в свой проект.
Чтобы добавить существующий исходный файл: в обозревателе решений щелкните правой кнопкой мыши папку « Исходные файлы », выберите « Добавить» , а затем « Существующий элемент» . Теперь выберите исходный файл, содержащий main()
Если вы используете Visual Studio. Причина, по которой вы можете получить эту ошибку, может быть связана с тем, что вы изначально создали новый файл header.h и затем переименовали его в файл file.cpp, где вы поместили функцию main ().
Чтобы исправить проблему, щелкните правой кнопкой мыши файл file.cpp -> нажмите «Свойства», чтобы перейти к
Свойства конфигурации -> Общие -> Тип элемента и изменить его значение на компилятор C / C ++ вместо заголовка C / C ++.
У меня была эта проблема, несмотря на:
- с
main()
; а также - конфигурирование всех других проектов в моем решении как статических библиотек.
Мое возможное исправление было следующим:
- my
main()
был в пространстве имен, поэтому было эффективно вызваноsomething::main()
… удаление этого пространства имен устраняло проблему.
Я столкнулся с ошибкой LNK2019 во время работы над проектом DLL в Visual Studio 2013.
Я добавил новую конфигурацию в проект. Но вместо того, чтобы иметь «Тип конфигурации» как «Динамическая библиотека», визуальная студия добавила его как «Приложение». Это привело к ошибке LNK2019.
Исправлена ошибка LNK2019, перейдя в Project -> Properties -> Configuration Properties -> General и изменив «Тип конфигурации» на «Dynamic Library (.dll)» и «Target Extension» на «.dll».
Да, исходный вопрос говорит о проекте консоли / приложения, что является другой проблемой, чем мой ответ. Но я считаю, что добавление этого ответа может помочь кому-то (как и мне), который наткнулся на эту тему.
У вас нет главной функции, которая должна быть отправной точкой для вашей программы.
перейдите к разделу «Свойства проекта-Свойства-Конфигурация-Linker-input-Дополнительные зависимости», затем перейдите в конец и введите «; ws2_32.lib».