0

我正在编写一个程序来搜索一系列素数,大约进行到一半以检查我的进度,我决定构建它以确保一切正常,我不断收到错误 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);
        }
    }
}
4

3 回答 3

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在该块的范围之外将不可见。

于 2013-03-07T22:27:15.523 回答
1

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

int singlePrime(int subjectNumber);

您还没有为函数定义主体。您需要实现它(或至少给它一个虚拟实现)。

于 2013-03-07T22:27:14.473 回答
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);

为了将来参考,如果您发布了完整的错误消息,将会有所帮助。你知道,万一我们的水晶球因为太阳耀斑而失灵。

于 2013-03-07T22:29:17.957 回答