Подтвердить что ты не робот

Ошибка LNK2019: неразрешенный внешний символ _main, указанный в функции ___tmainCRTStartup

Я не знаю, что с ним не так.. Я не могу найти, где ошибка, комментируя реализацию, также не разрешает ошибку.

Файл заголовка

#ifndef MAIN_SAVITCH_SEQUENCE_H
#define MAIN_SAVITCH_SEQUENCE_H
#include <cstdlib>  // 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

Источник

#include "sequence1.h"
#include <assert.h>

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 <= used && used > 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 < sequence::CAPACITY); // no room to add an item

        // move items up - starting with the last item and working down to the current item
        // arrays start at 0, so the -1 adjusts it
        for (size_type i = used - 1; i >= 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 < sequence::CAPACITY); // no room to add an item

        // move items up - starting with the last item and working down to the current item
        // arrays start at 0, so the -1 adjusts it
        for (size_type i = used - 1; i > 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];
    }

}
4b9b3361

Ответ 1

Даже если ваш проект имеет метод main(), компоновщик иногда путается. Вы можете решить эту проблему в Visual Studio 2010, выбрав

Проект → Свойства → Свойства конфигурации → Коннектор → Система

и сменив SubSystem на Консоль.

Ответ 2

У нас также была эта проблема. Мой коллега нашел решение. Это оказалось переопределение "основного" в заголовке третьей стороны:

#define main    SDL_main

Итак, решение заключалось в том, чтобы добавить:

#undef main

перед нашей основной функцией.

Это явно глупость!

Ответ 3

Если у вас есть функция _tmain в ваших проектах, вам нужно include <tchar.h>.

Ответ 4

Вам нужна функция main(), поэтому программа знает, с чего начать.

Ответ 5

Если кто-то пропустил очевидное; обратите внимание: если вы создадите приложение GUI и " -subsystem: windows" в link-args, запись приложения WinMain @16 . Не main(). Следовательно, вы можете использовать этот фрагмент для вызова основного():

#include <stdlib.h>
#include <windows.h>

#ifdef __GNUC__
#define _stdcall  __attribute__((stdcall))
#endif

int _stdcall
WinMain (struct HINSTANCE__ *hInstance,
         struct HINSTANCE__ *hPrevInstance,
         char               *lpszCmdLine,
         int                 nCmdShow)
{
  return main (__argc, __argv);
}

Ответ 6

Вы реализовали функцию main()?

int main(int argc, char **argv) {
    ... code ...
    return 0;
}

[править]

У вас есть main() в другом исходном файле, поэтому вы, вероятно, забыли добавить его в свой проект.

Чтобы добавить существующий исходный файл: в Обозреватель решений щелкните правой кнопкой мыши папку Исходные файлы, выберите Добавить, а затем нажмите Существующий элемент. Теперь выберите исходный файл, содержащий main()

Ответ 7

У меня была эта проблема, несмотря на:

  • с main(); и
  • настройка всех других проектов в моем решении как статических библиотек.

Мое возможное исправление было следующим:

  • my main() был в пространстве имен, поэтому был эффективно назван something::main()... удаление этого пространства имен устраняло проблему.

Ответ 8

Если вы используете Visual Studio. Причина, по которой вы можете получить эту ошибку, может быть связана с тем, что вы изначально создали новый файл header.h и затем переименовали его в файл file.cpp, где вы поместили функцию main().

Чтобы исправить проблему, щелкните правой кнопкой мыши файл file.cpp → щелкните Свойства перейдите на страницу Свойства конфигурации → Общие → Тип элемента и измените его значение на C/С++ вместо заголовка C/С++.

Ответ 9

Я столкнулся с ошибкой LNK2019 при работе над проектом DLL в Visual Studio 2013.

Я добавил новую конфигурацию в проект. Но вместо того, чтобы иметь "Тип конфигурации" как "Динамическая библиотека", визуальная студия добавила его как "Приложение". Это привело к ошибке LNK2019.

Исправлена ​​ошибка LNK2019, перейдя в Project → Properties → Configuration Properties → General и изменив "Тип конфигурации" на "Dynamic Library (.dll)" и "Target Extension" на ".dll".

Да, исходный вопрос говорит о проекте консоли/приложения, что является другой проблемой, чем мой ответ. Но я считаю, что добавление этого ответа может помочь кому-то (как и мне), который наткнулся на эту тему.

Ответ 10

У вас нет основной функции, которая должна быть точкой входа для вашей программы.

Ответ 11

перейдите в раздел "Свойства проекта-Свойства-Конфигурация-Linker-input-Дополнительные зависимости", затем перейдите к концу и введите "; ws2_32.lib".

Ответ 12

проверяет, что ваш заголовок (.h) и исходный файл (.cpp) успешно добавлены в explorer. если они не копируют и вставляют их в подпапку "Заголовочные файлы" и "Исходные файлы".