Ошибка LNK2019 C++ Невыносимо простая программа

Я писал программу для поиска ряда простых чисел, и примерно на полпути, чтобы проверить мой прогресс, я решил построить ее, чтобы убедиться, что все работает хорошо, я получаю ошибку 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);
        }
    }
}

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 не будет виден за пределами этого блока.

Вероятно, это пометит этот прототип функции:

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

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

Другие вопросы по тегам