Итак, я работаю над заданием для школы, включающим занятия и как получить доступ к частным публичным функциям.Насколько я знаю, я должен быть в состоянии установить значения экземпляра класса, который передается в функции.Однако, когда я запускаю программу, она устанавливает значение переменной вне значений, указанных в функции.Мне не разрешено манипулировать файлом заголовка, чтобы изменить значение возвращаемого типа функции.Могу ли я получить подсказку о том, что я делаю неправильно?
Вот определение для функции в классе Location.Как вы можете видеть, у него нет аргументов, и поэтому я не могу поставить return temp;
, поэтому программа знает, как его сохранить.
void Location::pick() {
Location temp;
srand(time(nullptr));
int tmp = rand() % fieldSize + 1;
int tmp = rand() % fieldSize + 1;
switch (tmp) {
case 1:
temp.y = 'a';
break;
case 2:
temp.y = 'b';
break;
case 3:
temp.y = 'c';
break;
case 4:
temp.y = 'd';
break;
case 5:
temp.y = 'e';
break;
case 6:
temp.y = 'f';
break;
}
}
Вот прототип класса (если это правильный термин для него)
class Location {
public:
Location(); // void constructor, assigns -1 to X coord, and * to Y coord
void pick(); // picks a random location
void fire(); // asks the user to input coordinates of the next shot
void print() const; // prints location in format "a1"
// predicate returns true if the two locations match
friend bool compare(const Location&, const Location&);
private:
static const int fieldSize = 6; // the field (ocean) is fieldSize X fieldSize
int x; // 1 through fieldSize
char y; // 'a' through fieldSize
};
Вот тестовый код, который я пытаюсь запустить правильно
int main() {
// srand(time(nullptr)); // random seed
srand(1); // fixed seed
//
// checking location object
//
Location mySpot, userShot;
mySpot.pick(); // selecting a new random location
cout << "Randomly selected location is: "; mySpot.print();
cout << "Input location: ";
userShot.fire(); // having user input a location
if (compare(mySpot, userShot))
cout << "Random location matches user input.\n";
else
cout << "Random location does not match user input.\n";
}
При запуске теста устанавливается значение инициализированной переменной «Случайно выбранное местоположение: -858993460╠». Я не понимаю, что я делаю неправильно.Может ли кто-нибудь дать мне подсказку или объяснение?Мой синтаксис неправильный?Это неправильная логика?
Вот все функции, которые я сделал до сих пор, если вы думаете, что проблема в другом месте
#include <iostream>
#include <cstdlib>
#include <cmath>
#include "battleship.h"
using std::cin; using std::cout; using std::endl;
Location::Location() {
int x = -1;
char y = '*';
}
void Location::pick() {
Location temp;
srand(time(nullptr));
int tmp = rand() % fieldSize + 1;
switch (tmp) {
case 1:
temp.y = 'a';
break;
case 2:
temp.y = 'b';
break;
case 3:
temp.y = 'c';
break;
case 4:
temp.y = 'd';
break;
case 5:
temp.y = 'e';
break;
case 6:
temp.y = 'f';
break;
}
}
void Location::fire() {
Location loc;
cout << "Input the location you wish to fire at";
cin >> loc.x;
cin >> y;
}
void Location::print()const {
Location loc;
int x = loc.x;
char y = loc.y;
cout << x << y;
}
bool compare(const Location& a, const Location& b) {
if (a.x == b.x && a.y == b.y){
return true;
}
else return false;
}