error: use of deleted function 'Hund4::Hund4()'
error: use of deleted function 'Hund4::Hund4()'
我是 C++ 的新手。我写这段代码是为了理解 public
、protected
和 private
之间的区别。问题是,当我创建 Hund4
的对象时,出现此错误:
use of deleted function
这个错误在最后一行。
你能帮我解决这个问题吗?
#include <iostream>
#include <iostream>
#include <string>
using namespace std;
class Tier
{
public:
void wieMachtDasTier()
{
cout << "Hello\n";
}
protected:
void foo()
{
cout << "foo\n";
}
private:
void baz()
{
cout << "baz\n";
}
};
class Hund: public Tier
{
private:
string name;
public:
Hund(string newname):name(newname){}
string getname()
{
return this->name;
}
void test()
{
foo();
}
};
class Hund2: protected Tier
{
public:
void test()
{
foo();
}
};
class Hund3: private Tier
{
public:
void test()
{
foo();
}
};
class Hund4 : public Hund
{
};
int main()
{
Hund ace("ace");
ace.wieMachtDasTier();
Tier Haustier;
ace.test();
Hund2 ace2;
ace2.test();
Hund3 ace3;
ace3.test();
Hund4 ace4;
return 0;
}
Hund4
派生的Hund
class没有默认构造函数,所以Hund4
没有默认构造函数。您可以从 std::string
或 Hund
构建 Hund4
,但是:
Hund4 ace4(std::string{"ace4"});
Hund4 ace4(Hund{"ace4"});
using std::literals;
Hund4 ace("Waldi"s);
出于某种原因,其他人请解释为什么 const char *
对 Hund
足够,但对 Hund4
不起作用。
或者,你必须给Hund4
一个构造函数:
class Hund4 : public Hund
{
public:
Hund4(string newname) : Hund(newname) { }
};
Hund4 ace4("ace4");
Tier
没有 user-declared 构造函数,而 std::string
是 default-constructable,所以 Tier
有一个compiler-generated 默认构造函数。
Hund2
和 Hund3
派生自 Tier
,没有 user-declared 构造函数,也没有任何非default-constructable 数据成员,因此它们也有 compiler-generated 个默认构造函数。
另一方面,Hund
有一个 user-declared 构造函数,因此它没有 compiler-generated默认构造函数。
Hund4
没有 user-declared 构造函数,但是 Hund
不是 default-constructable,所以 Hund4
有没有 compiler-generated 默认构造函数。
因此,如果您希望 Hund4
成为 default-constructable,您需要:
制作Hund
default-constructable,eg:
class Hund: public Tier
{
private:
string name;
public:
Hund() {}
Hund(string newname) : name(newname) {}
// or:
// Hund(string newname = "") : name(newname) {}
...
};
给Hund4
它自己的user-declared默认构造函数,调用Hund
的non-default构造函数,例如:
class Hund4 : public Hund
{
public:
Hund4() : Hund("") { }
// or:
// Hund4(string newname = "") : Hund(newname) { }
};
我是 C++ 的新手。我写这段代码是为了理解 public
、protected
和 private
之间的区别。问题是,当我创建 Hund4
的对象时,出现此错误:
use of deleted function
这个错误在最后一行。
你能帮我解决这个问题吗?
#include <iostream>
#include <iostream>
#include <string>
using namespace std;
class Tier
{
public:
void wieMachtDasTier()
{
cout << "Hello\n";
}
protected:
void foo()
{
cout << "foo\n";
}
private:
void baz()
{
cout << "baz\n";
}
};
class Hund: public Tier
{
private:
string name;
public:
Hund(string newname):name(newname){}
string getname()
{
return this->name;
}
void test()
{
foo();
}
};
class Hund2: protected Tier
{
public:
void test()
{
foo();
}
};
class Hund3: private Tier
{
public:
void test()
{
foo();
}
};
class Hund4 : public Hund
{
};
int main()
{
Hund ace("ace");
ace.wieMachtDasTier();
Tier Haustier;
ace.test();
Hund2 ace2;
ace2.test();
Hund3 ace3;
ace3.test();
Hund4 ace4;
return 0;
}
Hund4
派生的Hund
class没有默认构造函数,所以Hund4
没有默认构造函数。您可以从 std::string
或 Hund
构建 Hund4
,但是:
Hund4 ace4(std::string{"ace4"});
Hund4 ace4(Hund{"ace4"});
using std::literals;
Hund4 ace("Waldi"s);
出于某种原因,其他人请解释为什么 const char *
对 Hund
足够,但对 Hund4
不起作用。
或者,你必须给Hund4
一个构造函数:
class Hund4 : public Hund
{
public:
Hund4(string newname) : Hund(newname) { }
};
Hund4 ace4("ace4");
Tier
没有 user-declared 构造函数,而 std::string
是 default-constructable,所以 Tier
有一个compiler-generated 默认构造函数。
Hund2
和 Hund3
派生自 Tier
,没有 user-declared 构造函数,也没有任何非default-constructable 数据成员,因此它们也有 compiler-generated 个默认构造函数。
Hund
有一个 user-declared 构造函数,因此它没有 compiler-generated默认构造函数。
Hund4
没有 user-declared 构造函数,但是 Hund
不是 default-constructable,所以 Hund4
有没有 compiler-generated 默认构造函数。
因此,如果您希望 Hund4
成为 default-constructable,您需要:
制作
Hund
default-constructable,eg:class Hund: public Tier { private: string name; public: Hund() {} Hund(string newname) : name(newname) {} // or: // Hund(string newname = "") : name(newname) {} ... };
给
Hund4
它自己的user-declared默认构造函数,调用Hund
的non-default构造函数,例如:class Hund4 : public Hund { public: Hund4() : Hund("") { } // or: // Hund4(string newname = "") : Hund(newname) { } };