Использование функции bool для сопоставления сумм в C ++ - PullRequest
0 голосов
/ 27 апреля 2020

Я написал эту программу, которая должна решать колесо с номерами от 1 до 11, и у меня возникают проблемы с выяснением причины этой ошибки компоновщика. Я полагаю, что у меня все остальное работает нормально в теле кода, за исключением этой логической функции, которая использует целочисленный массив, но возникшая ошибка говорит о следующем. Я не уверен, что я сделал неправильно с функцией. Я объявил это с использованием прототипа в начале кода, я вызываю функцию, используя ее собственное имя и вызываю массив правильно. Может кто-нибудь помочь мне выяснить, что не так с кодом?

неопределенная ссылка на 'matchSums (int)'…… перемещение усечено до соответствия: R_X86_64_PC32 для неопределенного символа

#include <fstream>
#include <iostream>
#include <iomanip>
#include <string>
#include <time.h>
using namespace std;


const int MAX_CIRCLES = 11;
const int CENTER_CIRCLE_INDEX = 10;
bool matchingSums(int);
void fillTheWheel(int []);
void displayWheelContents(int []);
void randomizeTheContents(int, int []);
int nbrOfItems, firstSum, nextSum;
int main(void)
{

srand(time(NULL));

int wheel[MAX_CIRCLES];

int numInt = 0;
fillTheWheel(wheel);

while (!matchingSums(*wheel))
{

numInt++;

randomizeTheContents(MAX_CIRCLES, wheel);
}
cout << "After " << numInt << " unsuccessful attempts, the following solution was found:" << endl;
displayWheelContents(wheel);
}


void fillTheWheel(int wheel[])
{

for (int fillTheWheelIndex = 0; fillTheWheelIndex < MAX_CIRCLES; fillTheWheelIndex++)
{
wheel[fillTheWheelIndex] = (fillTheWheelIndex + 1);
}
}
void displayWheelContents(int wheel[])
{

cout << "* Outside circles (clockwise from the top):" << endl << " " << endl;

for (int wheelIndex = 0; wheelIndex < MAX_CIRCLES; wheelIndex++)
{
// Print each value in a column width of 4 as shown in the example-program-execution.txt file
cout << setw(4) << wheel[wheelIndex] << " ";
}

cout << " " << endl << " " << endl << "*Center circle: " << wheel[CENTER_CIRCLE_INDEX] << endl;
}

void randomizeTheContents(int nbrOfItems, int table[])
{

for (int indexA = 0; indexA < nbrOfItems; indexA++)
{
int indexB = rand() % nbrOfItems;
int temp = table[indexA];
table[indexA] = table[indexB];
table[indexB] = temp;
}
}

bool matchingSums(int wheel[])
{
const int MAX_OUTER_CIRCLES = MAX_CIRCLES - 1;
const int OPPOSITE_SIDE_FACTOR = 5;
const int STARTING_INDEX = 0;
int firstSum;
int nextSum;
// Calculate the sum of the first pair of numbers
firstSum = wheel[STARTING_INDEX] + wheel[CENTER_CIRCLE_INDEX] 
+ wheel[STARTING_INDEX + OPPOSITE_SIDE_FACTOR];
// Compare the first sum to each of the sums of the other pairs
for (int i = 1; i < MAX_OUTER_CIRCLES/2; i++)
{
nextSum = wheel[i] + wheel[CENTER_CIRCLE_INDEX] + wheel[i + OPPOSITE_SIDE_FACTOR];
if (firstSum != nextSum)
return false; 
} // End for

return true;
} // End matchingSums

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Первоначально функция объявляется с параметром типа int вроде

bool matchingSums(int);

И вызывается с аргументом типа int в main

while (!matchingSums(*wheel))

Но в своем определении он объявляется с параметром типа int [], который неявно настраивается компилятором на тип int * как

bool matchingSums(int wheel[])

Таким образом, компилятор выдает ошибку, потому что он не нашел определение функции, объявленной как

bool matchingSums(int);
1 голос
/ 27 апреля 2020

Аргумент matchingsums имеет тип int , но определение функции matchSums принимает int wheel [] , целочисленный тип массива без размера.

Вы, должно быть, упустили это из виду, поскольку функция fillTheWheel принимает тот же тип аргумента, но был объявлен и определен просто отлично.

Заменить прототип bool matchingSums(int) на bool matchingSums(int []).

...