2013-03-07 68 views
0

我正在编写一个程序来搜索一系列素数,大约一半来检查我的进度我决定建立它以确保一切正常工作好,我不断收到错误LNK2019!它说这是一个无法解决的外部因素。我做了一些研究,但我对其中的任何东西都不甚了解。这是代码。错误LNK2019 C++非常简单的程序

#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

从它'singlePrime'的外观。代码在哪里? – Thomas 2013-03-07 22:27:34

+0

首先不要使用'使用命名空间std'在这里阅读更多关于为什么它的坏[链接]的详细信息(http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-a -bad - 实践 - 在-C)。然后,我觉得我必须提倡我为初学者程序员提供一个新的问答网站的建议。在哪里可以问初学者的问题和专家来到那里,因为然后想教而不是仅仅给出RTFM的答案。 http://area51.stackexchange.com/proposals/52242/beginner-programmers?referrer=YHFcRobXPDGfDpFmz1HCvA2 – AxelOmega 2013-03-07 22:29:15

+0

建议:您开始使用大写字母的方法名称;将帮助你区分变量名称。 – 2013-03-07 22:29:17

回答

1

它可能检举此函数原型:

int singlePrime(int subjectNumber);

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

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

+2

这不是你在这里强调的函数声明,它是一个'int' :) – jrok 2013-03-07 22:35:45

+0

@jrok:该死,你说得对:-)我应该休息一下。将编辑,谢谢 – 2013-03-07 22:36:28

+0

好变量声明安迪,jrok。 – 2013-03-07 22:38:55

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? 
} 

但是这ISN”如何在C或C++中调用函数。你应该仔细看看你的书或课堂笔记。你会做这样的事情:

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

并为未来的参考,如果你发布你的完整错误信息,这将有助于。你知道,如果我们的水晶球由于太阳耀斑发生故障。