lnk — ошибка C ++ LNK1561 (если включена функция main ())

По какой-то причине, хотя у меня определена функция main (), я получаю ошибку LNK1561.

Мой файл search.h:

#pragma once

#include <iostream>
#include <fstream>

using namespace std;

namespace standard{
class Search
{
public:
bool sequential_find(int num);
bool recursive_binary_find(int num);
bool iterative_binary_find(int num);

void init_array();
void init_sorted_array();
void set_seed(int seed);
int getSize();

bool binSearch(int d, int low, int high);

// this is just for practice and debugging.
friend ostream& operator<< (ostream& out, const Search& s)
{
// put the code in here.
}

Search(int size,int seed=0);
~Search();

private:

int size;
int* array;
static int* data;
};
}

И мой файл search.cpp:

#include "Search.h"
using namespace std;

namespace standard{

int main()
{
return 0;
}

//  Search::Search(int size,int seed=0)
//  {
//
//  }

bool Search::sequential_find(int num)
{
for (int i=0; i<getSize(); i++)
{
if(data[i] == num)
{
return true;
}
}
return false;
}bool Search::recursive_binary_find(int num)
{
int high = getSize()-1;
int low = 0;
return binSearch(num, low, high);
}

bool Search::binSearch(int d, int low, int high)
{
if (low > high)
return false;
int mid = (high+low)/2;
if (d == data[mid])
return true;
if (d < data[mid])
return binSearch(d, low, mid-1);
else
return binSearch(d, mid+1, high);
}

bool Search::iterative_binary_find(int num)
{
int high = getSize()-1;
int low = 0;
while (low <= high)
{
int mid = (high+low)/2;
if (num == data[mid])
return true;
else if (num < data[mid])
high = mid-1;
else if (num > data[mid])
low = mid+1;
}
return false;
}

void Search::init_array()
{

}
void Search::init_sorted_array()
{

}
void Search::set_seed(int seed)
{

}
int Search::getSize()
{
return size;
}
}

Очевидно, я не сделал ничего существенного в своей основной функции, я работаю над тем, чтобы заставить его скомпилироваться вообще.

0

Решение

Вы положили свой main() функция в standard Пространство имен. Это не точка входа в вашу программу. Точка входа вашей программы должна находиться в глобальном пространстве имен.

В соответствии с пунктом 3.6.1 / 1 стандарта C ++ 11:

Программа должна содержать Глобальный функция называется main, который является назначенным началом программы. Это
определяется реализацией, требуется ли программе в автономной среде для определения основного
функция.

Чтобы решить проблему, просто переместите main() в глобальном пространстве имен. Также обратите внимание, что return 0 не обязательно. Стекает с конца main() эквивалентно возвращению 0.

2

Другие решения

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

Для стандарта C ++ 3.6.1:

Программа должна содержит глобальную функцию под названием main, который является назначенным началом программы. Определяется реализацией, требуется ли программе в автономной среде для определения главной функции. […]

1

По вопросам рекламы [email protected]