繁体   English   中英

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

[英]Error LNK2019 C++ Unbearably simple program

我正在编写一个程序来搜索一系列质数,大约在检查过程中途检查了进度,因此决定构建该程序以确保一切正常,我一直收到错误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);
        }
    }
}

在这里,您可以声明一个从未定义的函数:

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

可能是在标记此函数原型:

int singlePrime(int subjectNumber);

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

好吧,我的心理调试技能已经指出了问题所在。 如下代码:

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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM