C ++ LNK1561错误(包含main()时)

时间:2013-05-27 22:45:45

标签: c++ lnk

由于某种原因,即使我定义了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;
        }
    }

显然我的主要功能没有做任何实质性的事情,我正在努力让它完全编译。

2 个答案:

答案 0 :(得分:2)

您已将main()函数放在standard命名空间中。这不是你的计划的切入点。程序的入口点应该在全局命名空间中。

根据C ++ 11标准的第3.6.1 / 1段:

  

程序应包含名为main全局函数,该函数是程序的指定开始。它   是实现定义是否需要独立环境中的程序来定义主体   功能

要解决此问题,只需将main()移动到全局命名空间即可。另请注意,return 0不是必需的。流出main()的末尾相当于返回0。

答案 1 :(得分:1)

你将main放在你自己的命名空间standard中,这使得它成为属于你的命名空间的函数,而不是main应该再存在的全局函数。

对于C ++标准3.6.1:

  

程序必须包含一个名为main 的全局函数,它是程序的指定开始。实现定义是否需要独立环境中的程序来定义主函数。 [...]