Как создать конструктор копирования (ошибка: фактические и формальные списки аргументов различаются по длине) - PullRequest
0 голосов
/ 11 апреля 2019

У меня проблемы с текущим заданием, которое я получил (сделано на Java). Мне дали проект, чтобы сделать с абстрактным классом и подклассами. Тем не менее, я застрял с созданием конструктора копирования для него, потому что я продолжаю получать ошибку: фактические и формальные списки аргументов различаются по длине. Здесь arr - абстрактный «супер» класс, внутри которого определена только функция конструктора (показано ниже). Конструктор имеет аргументы, которые соответствуют строкам (m) и столбцам (n) двумерного массива. В классе Board (который расширяет arr) я должен определить как конструктор, так и конструктор копирования. Я определил конструктор, используя super (m, n), но я не могу определить конструктор копирования (и я не уверен, что конструктор подкласса здесь тоже правильный).

В классе обр:

protected int a, b;
protected Arr (int height, int width) { 
   a = height; 
   b = width; 
}

В плате Подкласс:

public class Board extends Arr{
private int[][] space;
public Board (int a, int b){
   super(a,b);
   this.space = new int[a][b];
}

Конструктор копирования

public Board(Board X) {
   board copy = new Board(a,b);
   copy.space = X.space;
}

Я получаю сообщение об ошибке "public board (board X) {", так как кажется, что у меня неверные аргументы. Однако мне не разрешено менять аргументы здесь. Из моего предыдущего исследования об этом я знаю только, что конструктор копирования копирует объект аргумента, но я не могу этого сделать, потому что я не знаю, как его создать. Спасибо за вашу помощь

1 Ответ

1 голос
/ 11 апреля 2019

Вам не хватает ключевого слова "class" из определения класса, для начала:

public class board extends arr

Ваш конструктор копирования неверен:

board copy = new board(a,b);
copy.data = X.data;

Все, что вы делаете, создает другой board экземпляр, который немедленно отбрасывается.Вы не устанавливаете какие-либо значения этого экземпляра.

Вам необходимо вызвать супер-конструктор:

super(X.m, X.n);

Имена классов должны быть PascalCase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...