错误LNK2019 C ++难以忍受的简单程序

时间:2013-03-07 22:24:49

标签: c++ lnk2019

我正在编写一个程序来搜索一系列素数,大约一半检查我的进度我决定构建它以确保一切正常,我一直收到错误LNK2019!它说它是一个未解决的外部。我做了一些研究,但我不了解任何东西。这是代码。

#include <iostream>

using namespace std;

int singlePrime(int subjectNumber);

int main() {
    cout<<"Would you like to find a single prime number(1), or a range(2)?"<<endl;

    int methodchoice;
    cin>>methodchoice;

    if(methodchoice ==1) {
        int subjectNumber;
        cout<<"Which number would you like to test for primeness?"<<endl;
        cin>>subjectNumber;
        int singlePrime(subjectNumber);
    }

    if(methodchoice==2) {
        int  lowRange;
        int highRange;

        cout<<"Input the low value for your range."<<endl;
        cin>> lowRange;

        cout<<"Input the high value for your range"<<endl;
        cin>> highRange;

        for (int index=lowRange; index<highRange;index++) {
            if (index=highRange) {
                break;
            }

            singlePrime(index);
        }
    }
}

3 个答案:

答案 0 :(得分:3)

在这里,您声明一个永远不会定义的函数

int singlePrime(int subjectNumber);

链接器抱怨因为你调用了这个函数,但它的主体却找不到。

要验证这是否是问题,请将声明替换为包含一些虚拟实现的定义:

int singlePrime(int subjectNumber)
{
    return 0;
}

另请注意,这里有一个名为singlePrime的整数无用的初始化:

if (methodchoice ==1) {
    int subjectNumber;
    cout<<"Which number would you like to test for primeness?"<<endl;
    cin>>subjectNumber;
    int singlePrime(subjectNumber);
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Why this?
}

你可能意味着这一行要做其他事情(最有可能调用singlePrime()函数),因为singlePrime在该块的范围之外是不可见的。

答案 1 :(得分:1)

它可能标记了这个函数原型:

int singlePrime(int subjectNumber);

您尚未为该功能定义正文。你需要实现它(或者至少给它一个虚拟实现)。

答案 2 :(得分:0)

好吧,我的通灵调试技巧已经确定了问题所在。以下代码:

int singlePrime(int subjectNumber);

告诉编译器存在一个名为singlePrime的函数,该函数接受int并返回int

当然,你从来没有提供该函数的代码......编译器假定它在其他一些.cpp文件中并且说“哦,好吧,链接器会处理它。”

当链接器出现时,它会发现它应该找到一个名为singlePrime的函数,该函数接受int并返回int。但是这个功能无处可寻。

简单修复,更改:

int singlePrime(int subjectNumber);

int singlePrime(int subjectNumber)
{
  // some code here to do whatever singlePrime is supposed to do
  // be sure to return the correct number. For now, return the 
  // number of the beast!

  return 666;
}

在您的代码中,您似乎尝试调用此函数:

if (methodchoice ==1) {
    int subjectNumber;
    cout<<"Which number would you like to test for primeness?"<<endl;
    cin>>subjectNumber;
    int singlePrime(subjectNumber); // What?
}

但这不是你用C或C ++调用函数的方式。你应该仔细看看你的书或课堂笔记。你会做这样的事情:

// call singlePrime and store the result in a variable called
// ret so that we can use it.
int ret = singlePrime(subjectNumber);

如果您发布了完整的错误消息,将会有所帮助。你知道,如果我们的水晶球由于太阳耀斑而发生故障。