[英]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.