0

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

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

4

2 回答 2

2

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

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

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

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

于 2013-05-27T22:47:24.263 回答
1

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

对于 C++ 标准 3.6.1:

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

于 2013-05-27T22:47:51.617 回答