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