【发布时间】:2018-02-13 07:18:51
【问题描述】:
在此代码中尝试创建 dobj4 时出现编译器错误
#include<iostream>
using namespace std;
class mod;
class name {
friend mod;
public:
name(const char* n) {
cout << "1 arg constructor for name\n";
}
name() {
cout << "no arg constructor for name\n";
}
name(const char* n, int i ){
cout << "2 arg constructor for name\n";
}
};
class mod {
public:
mod() {
cout << "base class constructor invoked\n";
}
};
struct derived : mod {
derived(name) {
cout << "derived constructor invoked\n";
}
};
int main() {
name nobj;
derived dobj(nobj);
name nobj1("hello");
derived dobj1(nobj1);
derived dobj2("Hi");
name nobj2("yo", 2);
derived dobj3(nobj2);
// derived dobj4("go", 4);
return 0;
}
需要了解在 dobj2 的情况下传递字符串时如何调用名称的构造函数,但在 dobj4 的情况下会导致错误。
如何解决这个问题?
【问题讨论】:
-
构造函数不会自动继承。
-
派生的没有可以接受两个参数的构造函数。在派生中添加一个构造函数为 derived(const char *n, int n) { // impelmentation }。它应该可以工作。
-
我怀疑你误解了参数的隐式转换是如何工作的。在您最喜欢的 C++ 书籍中阅读更多有关它的信息。
-
是的 c++ 新手,我试图了解转换是如何在 dobj2 中发生的,但不是在 dobj4 中,感谢支持
-
@ashkun 我认为您需要澄清您的问题。即使有了 molbdnilo 的评论,也花了一些时间来理解您的问题
标签: c++ c++11 c++14 c++builder