2013-03-07 2 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

+0

Прежде всего, не используйте 'using namespace std', чтобы узнать больше о том, почему его плохо [ссылка] (http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-a -Bad-практика-в-с). Затем я чувствую, что должен продвигать свое предложение для нового Q & A сайта для начинающих программистов. Там, где должно быть хорошо спросить начинающих вопросов, и эксперты приходят туда, потому что тогда хотят учить, а не просто давать ответы в строке RTFM. http://area51.stackexchange.com/proposals/52242/beginner-programmers?referrer=YHFcRobXPDGfDpFmz1HCvA2 – AxelOmega

+0

Предложите: вы начинаете имена методов с большой буквы; поможет вам отличить имена переменных. –

ответ

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

+0

@jrok: Черт, вы правы :-) Я должен отдохнуть. Будет ли редактировать, спасибо –

+0

Хороший улов на этой переменной объявления Энди, jrok. –

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

И в будущем, было бы полезно, если Вы отправили сообщение об ошибке в полный вы получите. Вы знаете, в случае, если наши хрустальные шары неисправны из-за солнечных вспышек.

Смежные вопросы