Ответ 1
Даже если ваш проект имеет метод main()
, компоновщик иногда путается. Вы можете решить эту проблему в Visual Studio 2010, выбрав
Проект → Свойства → Свойства конфигурации → Коннектор → Система
и сменив SubSystem
на Консоль.
Я не знаю, что с ним не так.. Я не могу найти, где ошибка, комментируя реализацию, также не разрешает ошибку.
Файл заголовка
#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];
}
}
Даже если ваш проект имеет метод main()
, компоновщик иногда путается. Вы можете решить эту проблему в Visual Studio 2010, выбрав
Проект → Свойства → Свойства конфигурации → Коннектор → Система
и сменив SubSystem
на Консоль.
У нас также была эта проблема. Мой коллега нашел решение. Это оказалось переопределение "основного" в заголовке третьей стороны:
#define main SDL_main
Итак, решение заключалось в том, чтобы добавить:
#undef main
перед нашей основной функцией.
Это явно глупость!
Если у вас есть функция _tmain
в ваших проектах, вам нужно include <tchar.h>.
Вам нужна функция main()
, поэтому программа знает, с чего начать.
Если кто-то пропустил очевидное; обратите внимание: если вы создадите приложение 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);
}
Вы реализовали функцию main()
?
int main(int argc, char **argv) {
... code ...
return 0;
}
[править]
У вас есть main()
в другом исходном файле, поэтому вы, вероятно, забыли добавить его в свой проект.
Чтобы добавить существующий исходный файл: в Обозреватель решений щелкните правой кнопкой мыши папку Исходные файлы, выберите Добавить, а затем нажмите Существующий элемент. Теперь выберите исходный файл, содержащий main()
У меня была эта проблема, несмотря на:
main()
; иМое возможное исправление было следующим:
main()
был в пространстве имен, поэтому был эффективно назван something::main()
... удаление этого пространства имен устраняло проблему.Если вы используете Visual Studio. Причина, по которой вы можете получить эту ошибку, может быть связана с тем, что вы изначально создали новый файл header.h и затем переименовали его в файл file.cpp, где вы поместили функцию main().
Чтобы исправить проблему, щелкните правой кнопкой мыши файл file.cpp → щелкните Свойства перейдите на страницу Свойства конфигурации → Общие → Тип элемента и измените его значение на C/С++ вместо заголовка C/С++.
Я столкнулся с ошибкой LNK2019 при работе над проектом DLL в Visual Studio 2013.
Я добавил новую конфигурацию в проект. Но вместо того, чтобы иметь "Тип конфигурации" как "Динамическая библиотека", визуальная студия добавила его как "Приложение". Это привело к ошибке LNK2019.
Исправлена ошибка LNK2019, перейдя в Project → Properties → Configuration Properties → General и изменив "Тип конфигурации" на "Dynamic Library (.dll)" и "Target Extension" на ".dll".
Да, исходный вопрос говорит о проекте консоли/приложения, что является другой проблемой, чем мой ответ. Но я считаю, что добавление этого ответа может помочь кому-то (как и мне), который наткнулся на эту тему.
У вас нет основной функции, которая должна быть точкой входа для вашей программы.
перейдите в раздел "Свойства проекта-Свойства-Конфигурация-Linker-input-Дополнительные зависимости", затем перейдите к концу и введите "; ws2_32.lib".
проверяет, что ваш заголовок (.h) и исходный файл (.cpp) успешно добавлены в explorer. если они не копируют и вставляют их в подпапку "Заголовочные файлы" и "Исходные файлы".