没有适当的默认构造函数可用错误
Posted
技术标签:
【中文标题】没有适当的默认构造函数可用错误【英文标题】:no appropriate default constructor available error 【发布时间】:2013-05-08 06:39:19 【问题描述】:这是我的代码:
class package
protected:
string name;
string city;
string state;
int zip;
double weight;
double costPerOunce;
public:
package::package(string Name, string City, string State, int Zip, double Weight, double CostPerOunce):
name(Name), city(City), state(State),
zip(Zip), weight(Weight), costPerOunce(CostPerOunce)
double calculateCost()
return (weight * costPerOunce);
;
class twoDayPackage: public package
protected:
double flatFee;
public:
twoDayPackage::twoDayPackage(double FlatFee):
flatFee(FlatFee)
double calculateCost()
return (weight * costPerOunce) + flatFee;
;
int main()
system ("pause");
return 0;
我尝试运行这段代码,我得到的错误如下: error C2512: 'package' : 没有合适的默认构造函数可用
该错误与基类构造函数的继承有关,但我不知道代码未运行的确切原因。请帮帮我。
【问题讨论】:
请学习基本语法... 当你编写自己的构造函数时,默认的会被覆盖。twoDayPackage::twoDayPackage(double FlatFee):
会调用它,但它不存在。
【参考方案1】:
twoDayPackage::twoDayPackage(double FlatFee):
flatFee(FlatFee)
正在调用基本构造函数package()
,因为您没有指定任何其他内容。
在类包中添加一行package::package();
:)
【讨论】:
+1,但默认构造函数意味着他不会初始化任何其他成员(重量等)。但是,是的 - 这可能超出了这个问题的范围:) Moo-Juice - 是的,一个简短的答案不是一个完整的答案。我发现一次解决一个问题有助于学习 c++ 语法。 嗯,三个string
会是。
这并没有告诉 OP 危险。
我已添加该行并且程序运行。现在我想让类 twoDayPackage 获取类包的值。请帮忙。【参考方案2】:
你需要一个包的构造函数。
另外,在声明构造函数时不需要package::package(...)
(这是在cpp文件中定义它时)。只需package(...)
就可以了。
class package
protected:
string name;
string city;
string state;
int zip;
double weight;
double costPerOunce;
public:
package()
// \/ You don't need package:: that's only needed when you define the func in cpp
package(
string Name, string City, string State, int Zip,
double Weight, double CostPerOunce
)
: name(Name), city(City), state(State),
zip(Zip), weight(Weight), costPerOunce(CostPerOunce)
double calculateCost()
return (weight * costPerOunce);
;
【讨论】:
【参考方案3】:twoDayPackage
的构造函数将首先创建package
,然后再构造flatFee
。由于您没有告诉它如何执行此操作,它会寻找构造 package
的默认方式。
当您构造twoDayPackage
时,您需要为它提供构造底层package
所需的一切。要么,要么让它确定要传递给package
构造函数的值。
传入所需的参数如下所示:
class twoDayPackage
public:
twoDayPackage(string Name, string City, string State, int Zip, double Weight, double CostPerOunce, double flatFee) :
package(Name, City, State, Zip, Weight, CostPerOunce),
flatFee(flatFee)
//..
;
【讨论】:
你建议的语法是什么? 你我的朋友,是一个真正的忍者。非常感谢你。我的代码现在完全按照我想要的方式运行。再次,穆乔斯·格拉西亚斯!!!以上是关于没有适当的默认构造函数可用错误的主要内容,如果未能解决你的问题,请参考以下文章