我正在编写一个程序来搜索一系列素数,大约一半检查我的进度我决定构建它以确保一切正常,我一直收到错误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);
}
}
}
答案 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);
如果您发布了完整的错误消息,将会有所帮助。你知道,如果我们的水晶球由于太阳耀斑而发生故障。