用C ++重载构造函数动态分配对象

费隆

在C ++中使用重载的构造函数动态分配对象的语法是什么?

如果我有一个Foo课:

class Foo{
public:
    Foo(string str, int nbr);    // Overloaded constructor
};

第二类Foo2(使用Foo):

#include "Foo"
class Foo2{
public:
    Foo* myFoo;    // Wrong!
    Foo2(){
        myFoo = new Foo(myStr, myNbr);
    }
};

显示的错误如下:

没有匹配的函数来调用“ Foo :: Foo()”

创建myFoo对象指针时,如何指定它将使用Foo(string str, int nbr)构造函数,而不是Foo()构造函数。

是否可以不使用构造函数委托?

埃雷里卡

您构造该对象的语法是正确的。

由于您没有告诉错误,因此很难确定,但是我的猜测是您的问题是构造函数是private这意味着您不能在类之外使用构造函数。

编辑有关错误消息:

这是一个完整的示例。我添加了一些会产生错误的示例行:没有匹配的函数可以调用'Foo :: Foo()'。

#include <string>

class Foo{
public:
    Foo(std::string str, int nbr);
};

// empty definition
Foo::Foo(std::string str, int nbr) {}

// delegating constructor (c++11 feature)
// this would produce error: no matching function for call to 'Foo::Foo()'
//Foo::Foo(std::string str, int nbr) : Foo::Foo() {}

int main() {
    Foo* myFoo;
    myFoo = new Foo("testString", -1); // this is correct
    // trying to construct with default constructor
    //Foo myFoo2; // this would produce error: no matching function for call to 'Foo::Foo()'
    //Foo* myFoo3 = new Foo(); // so would this
}

鉴于该错误,您的代码正在尝试在某处使用默认构造函数

有关您的新Foo2示例的Edit2 您对Foo *的声明和对构造函数的调用仍然正确,并且如果您修复了方法的可见性和缺少分号,则代码应进行编译。以下示例编译:

#include <string>

class Foo{
public:
    Foo(std::string str, int nbr);    // Overloaded constructor
};

Foo::Foo(std::string str, int nbr){}

class Foo2{
    Foo* myFoo;    // This is still correct
public:
    Foo2() {
        myFoo = new Foo("", 1);
    }
};

int main() {
    Foo2 foo2;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++-本地堆栈数组与动态分配

来自分类Dev

用C ++分配对象

来自分类Dev

动态分配对象内部的动态分配

来自分类Dev

C结构的动态分配

来自分类Dev

C ++中的动态分配数组

来自分类Dev

如何正确管理动态分配对象的内存?

来自分类Dev

c ++动态分配初始值

来自分类Dev

在C中的函数内动态分配函数中的内存

来自分类Dev

C编程,动态分配+链表

来自分类Dev

用信号清除动态分配的数据

来自分类Dev

链表头动态分配-C

来自分类Dev

用动态变量分配对象

来自分类Dev

程序崩溃,从C函数访问动态分配的数组

来自分类Dev

QList clear函数调用是否清除存储在QList中的动态分配对象的内存?

来自分类Dev

允许动态分配的对象的C数组

来自分类Dev

c动态分配结构数组

来自分类Dev

比较C ++ 20常数表达式中允许的动态分配对象的地址吗?

来自分类Dev

如何删除指向动态分配对象的指针数组

来自分类Dev

C ++构造后无法访问动态分配的卡阵列

来自分类Dev

如何将指针传递给函数并在函数C ++中动态分配内存

来自分类Dev

动态分配对象内部的动态分配

来自分类Dev

C结构的动态分配

来自分类Dev

在C中的函数中动态分配数组

来自分类Dev

动态分配失败?C ++

来自分类Dev

C ++在构造函数中分配对属性的引用

来自分类Dev

动态分配的指向不从 C 函数返回的结构的指针

来自分类Dev

C++ 删除指向动态分配对象的指针

来自分类Dev

动态分配的内存构造函数

来自分类Dev

在 C++ 中销毁动态分配的内存(数组对象)