gpt4 book ai didi

java - 为什么我会收到此错误 "The constructor is undefined"?

转载 作者:行者123 更新时间:2023-12-01 07:44:01 24 4
gpt4 key购买 nike

在 Java 中,出现此错误:

Error: The constructor MyComplex(MyComplex) is undefined

Java 代码:

public class MyComplex {
int realPart, imaginaryPart;
public MyComplex(){
}
public MyComplex(int realPart, int imaginaryPart) {
this.realPart = realPart;
this.imaginaryPart = imaginaryPart;
}
public void setRealPart(int realPart) {
this.realPart = realPart;
}
public String toString() {
return realPart + " + " + imaginaryPart +"i";
}
}
public class MyComplexTester {
public static void main(String[] args) {
MyComplex a = new MyComplex(20, 50);
MyComplex b = new MyComplex(a); //Error happens here
b.setRealPart(4);
System.out.println(b);
}
}

如果我使用,代码可以正常工作

MyComplex b = a;

但是我无法更改主方法中的代码,因为它是设计类来运行给定方法的作业。

最佳答案

说明

您没有接受另一个 MyComplex 的构造函数(复制构造函数)。您只创建了接受以下内容的构造函数:

  • 无参数,new MyComplex()
  • 两个 int 参数,new MyComplex(5, 2)
<小时/>

解决方案

您需要显式定义要使用的构造函数。 Java 不会为你生成这样的构造函数。例如:

public MyComplex(MyComplex other) {
realPart = other.realPart;
imaginaryPart = other.imaginaryPart;
}

然后它也会起作用。

<小时/>

注释

为了提高代码的可读性,您应该对新的复制构造函数,尤其是默认构造函数使用显式构造函数转发。

举个例子,现在您的默认构造函数 new MyComplex() 将生成复数值 0 + 0i。但这很容易被监督,因为您的代码没有明确表明这一点。

通过转发,意图更加清晰:

public MyComplex() {
this(0, 0);
}

public MyComplex(MyComplex other) {
this(other.realPart, other.imaginaryPart);
}

然后两者都会转发到接受两个 int 值的显式构造函数。

请注意,Java 为您自动生成的唯一构造函数是简单的默认构造函数。即 public MyComplex() { } (无参数 - 不执行任何操作)。并且仅当您自己没有编写任何构造函数时。

关于java - 为什么我会收到此错误 "The constructor is undefined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58498261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com