求帮助们一个问题。假如类class A里有构造函数A(){} 主函数中 A a; 这样设置对象为什么会报错…

C++语言 码拜 8年前 (2017-04-11) 2009次浏览
求帮助高手们一个问题。假如类class A里有构造函数A(){}
主函数中
A a;
这样设置对象为什么会报错…
假如重载了函数模版想在其他函数里而不是主函数中初始化成员应该怎么办呢。

#include <iostream>
using namespace std;
class Test{
private:
int a;
int b;
char c;
public:
Test(int ax, int bx){
a = ax;
b = bx;
}
Test(char cx):c(cx){
}
void Print(){
cout << a <<” “<<b;
}
};
int main(){
Test t;
t.Print();
return 0;
}

Untitled.cpp:32:7: error: no matching constructor for initialization of “Test”
Test t;
^
Untitled.cpp:19:3: note: candidate constructor not viable: requires single argument “cx”, but no arguments were provided
Test(char cx):c(cx)
^
Untitled.cpp:5:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided
class Test{
^
Untitled.cpp:14:3: note: candidate constructor not viable: requires 2 arguments, but 0 were provided
Test(int ax, int bx){
^
1 error generated.

这是一个实验函数和它的报错。
但是本人再另一个程序中却没有报错
class Pet
{
public:
/*******构造类函数********/
//构造函数模版(sex,colour,weight)
Pet(string sex, string colour, string weight)
{
PetSex = sex;
PetColour = colour;
PetWeight = weight;
}
//重载成员列表初始化构造函数
Pet(int hun, int thir ,int mood , int heal , int clean)
:StateHungry(hun),StateMood(mood),StateHealth(heal),StateClean(clean)
{
}
…//其他成员函数
};
int main()
{ Pet p;
//PrintHomePage(p);
//BreedManual();
return 0;
}

这样就没有报错。
希望各位高手可以帮忙解答一下。蟹蟹蟹蟹喵>   <
解决方案

10

你的构造函数是有参数的,可是你在定义 类的对象的时候 并没有给他传参数
要么你定义一个没有参数的构造函数
要么你把有参数的构造函数的形参,设置初始值。

10

引用:

你的构造函数是有参数的,可是你在定义 类的对象的时候 并没有给他传参数
要么你定义一个没有参数的构造函数
要么你把有参数的构造函数的形参,设置初始值。

补充:构造函数也是个函数,他有他本人的参数,自然要给他传参数。不然肯定报错。
构造函数也可以重载,反正就是参数的数量和类型一定要对应。
按照第一个例子 你可以这么写:Test t(1,2);
你再试试

10

引用:
Quote: 引用:

你的构造函数是有参数的,可是你在定义 类的对象的时候 并没有给他传参数
要么你定义一个没有参数的构造函数
要么你把有参数的构造函数的形参,设置初始值。

等于说本人在定义类对象的时候默认调用了构造函数是吗

对 定义对象的时候 默认调用
假如有多个构造函数,则根据传入的参数数量及类型去区分。

5

关于构造函数,假如你没有定义构造函数,系统会给你默认一个构造函数,假如你本人写了一个构造函数,系统会优先调用你的构造函数,假如你想写多个构造函数,你只要改变你的参数的类型就可以了,记得在构造函数的时候一定要避免出现定义二义性的问题幺

20

引用:
Quote: 引用:
Quote: 引用:
Quote: 引用:
Quote: 引用:

你的构造函数是有参数的,可是你在定义 类的对象的时候 并没有给他传参数
要么你定义一个没有参数的构造函数
要么你把有参数的构造函数的形参,设置初始值。

补充:构造函数也是个函数,他有他本人的参数,自然要给他传参数。不然肯定报错。
构造函数也可以重载,反正就是参数的数量和类型一定要对应。
按照第一个例子 你可以这么写:Test t(1,2);
你再试试

对喔!那假如本人的类里有两个构造函数 主函数应该怎么声明呢 声明两遍吗?
还有还有 其他函数可以调用类的构造函数给成员赋值吗?
谢谢谢谢谢

主函数里没有声明啊,没太看懂
其他函数调用构造函数?  构造函数 就当做是一个函数就行,调用它就会走到函数里面  本人没太懂你的意思
所谓构造函数 就是使用类时 一定会走到的一个函数(且是第一个调用的函数) 所以一般 一些成员变量的数据初始化 都放在这里

就是例如说
class Test{
private:
int a;
int b;
char c;
public:
Test(int al,intbl){
a = al;
b = bl;
}
Test(char cl){
c = cl;
}
};
void main(){
Test t(2,1);
Test t(“A”);
}
这样写对嘛?

不对,你构造的两个类对象重名了,以下是对的:

class Test{
private:
	int a;
	int b;
	char c;
public:
	Test(int al,int bl){
		a = al;
		b = bl;
	}
	Test(char cl){
		c = cl;
	}
};
void main(){
	Test t1(2,1); 
	Test t2("A");
}

5

 你调用的是默认构造函数而你是写的有参构造函数

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求帮助们一个问题。假如类class A里有构造函数A(){} 主函数中 A a; 这样设置对象为什么会报错…
喜欢 (0)
[1034331897@qq.com]
分享 (0)