问题标签 [class-constructors]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
247 浏览

c++ - String 类的隐式构造函数

字符串 s2("hi");

我是否必须编写一个隐式字符串构造函数

String::String(const char* str);

或者

这个构造函数会处理它吗:

String::String(const String &str);

0 投票
1 回答
56 浏览

c++ - 构造函数中的成员初始化

有人可以告诉,在这段代码中如何声明构造函数,以便在实例化对象时,使用传递的值初始化高度,而宽度始终是默认值(在下面的情况下为 2)。

有人可以告诉我如何声明构造函数以使输出如下所示(我想声明只有一个参数的对象)?

0 投票
3 回答
999 浏览

android - 为什么我的构造函数没有被调用?

我正在尝试向 SQLite 表添加一些记录,但 LogCat 告诉我该表不存在。并且 DDMS 显示,是的,该表没有/尚未创建。

然而我确实在 SQLiteOpenHelper 类中创建了表:

我调用添加记录的类的方法:

这应该调用 SQLiteHandlerDeliveryItem 的构造函数(当 sqliteHandler 被实例化时),但它没有!我在 onCreate() 方法中有一个断点,果然 - 它从未到达过。

为什么?以及如何强制调用构造函数,以便创建表?

奇怪的 [est] 事情是我还在另一个(工作)SQLiteOpenHelper 类中放置了一个断点,而且它没有达到......什么?!?它至少工作了一次,因为该表确实存在/是从该代码创建的。

所以很明显我的挥杆有一个洞;我有什么误解或做错了什么?

更新

我过早地将答案标记为答案。

至于:

“1. 您必须在某个时候调用 getWritableDatabase() 或 getReadableDatabase()。”

确实在创建或读取记录的每个方法中调用 getWritableDatabase(),如下所示:

...关于:

“2. 在 SQLiteHandlerDeliveryItem 的构造函数中,您必须调用 super(...)。”

确实在扩展 SQLiteOpenHelper 的类中调用了 super:

所以......我仍然不知道问题/解决方案是什么......

更新 2

因此,当我尝试在 LogCat 中将记录插入此表时,我看到的是:

E/SQLiteLog:(1)没有这样的表:deliveryitems

然而,我尝试添加记录的代码实例化了扩展 SQLiteOpenHelper 的相应/适当类,如下所示:

...并且该类具有创建表的代码:

那么......我做错了什么,或者没有做对?

更新 3

确实没有创建表。LogCat 中的 err msg 表明情况确实如此(它是“没有这样的表:delivertitems”)。

我的构造函数如下所示:

确实,该代码不会输入。那么我必须跳过什么箍才能调用构造函数?

我认为当我实例化类时会发生这种情况:

即使调用它,构造函数如何知道 arg (SQLiteDatabase db) 是什么——它从哪里得到这个值?

我确实有一个数据库,只有一张表。它只是拒绝添加第二个表。

正如有人推荐的那样,我正在添加一个单独的类,该类为我要添加到数据库的每个表扩展 SQLiteOpenHelper。

当我到达那条线时:

...并混搭 F7 进入它,我到达类构造函数:

...但不是 onCreate 事件。

所以“难怪”我没有deliveryitems 表,因为创建该表的代码永远不会到达;但是为什么没有达到 - 我必须做些什么才能达到它?

0 投票
0 回答
64 浏览

c++ - 就地工厂和未初始化的空间要求:如果允许按成员建造省略

让我们考虑一下这个提升文档: http: //www.boost.org/doc/libs/1_35_0/libs/utility/in_place_factories.html

提炼:

实际上,因为 C++ 编译器在初始化列表期间调用类成员构造函数,所以我们不能在没有一些预处理器(或预编译器)的情况下从就地工厂扩展参数。因此,为了避免调用默认构造函数,我们将成员的类型更改为char*.

我要说的是,这是可悲的。

想象一下这contained_是预期的类型X

有没有办法阻止构造函数被调用?让成员处于未初始化状态,就像它只是一个具有正确空间和类型对齐要求的字节池一样,然后我们可以自由调用我们想要的构造函数,使用placement new(这正是-place-factory 有)?

这样,我们就不会遇到对齐问题或可读性问题,因为“可以存储什么char*?随便”

我们可以使用 in-place-factory 表示法,但在一个X类型上,而不是在一个char*类型上。

另外,在考虑答案时,请始终牢记您的解决方案应该能够直接在原地工作,如果结构C在堆栈上实例化,我不想要指针和堆分配,contained_对象必须保持原地, 在堆栈上。

您注意到原始的 boost 解决方案用于new受益于 16 字节对齐(在 Microsoft CRT 2014 中大于 4096 的对象减少了 32 字节)。有效地避免了由原本更自然的符号引起的对齐问题:

char contained_[sizeof(X)];

当然,“修复”将是__declspec(align(alignof(X)))在声明之前使用类似的东西contained_,但就像我说的那样,使用 char 数组几乎不是一个可维护的解决方案,迫使我们每次想要使用时都强制转换contained_......

谢谢 !

0 投票
1 回答
4818 浏览

php - Laravel 命令不能在子类中调用 $this->info()

我只是从 PHP 中的基本概念 OO 开始,

Foo.php

酒吧.php

当我运行Foo::fire()时,它给出:Call to undefined method Foo::__construct()。但Foo显然有一个构造函数,我做错了什么?

我怀疑的另一件事是它可能是 Laravel 问题而不是 PHP。这是artisan我创建的命令。

编辑:

$this->info('Bar')在任何地方打电话Bar也会给Call to a member function writeln() on a non-object. 为什么我不能从子类中调用父类的方法?

0 投票
1 回答
66 浏览

c# - C# 中的嵌套类帮助

两部分问题

使用我们老师提供给我们的一段代码,开发一个 MDI 程序,该程序旨在跟踪任意数量的通用商店的库存。我的思考过程是“一家商店有一个名称和一个商品记录”,所以下面的类定义代表了我定义的商店的范围。

第 1 部分)如何在类存储中创建一个未知数量的类记录数组?这个想法是一家商店不会被限制在 100 种不同的商品上。对于每个项目,都有一个记录,这应该能够说明添加一个新记录。

第 2 部分)我将如何在这个之外构建这个类?基本上,我将有一个窗口询问有关项目的信息(名称、ID 号码等)。我将如何创建新记录以放置在商店中?

谢谢您的帮助。类定义如下。

0 投票
2 回答
1208 浏览

c++ - C++'没有匹配的调用函数'和'没有已知的参数转换'

我有这段代码:

我必须更改代码以将所有代码都放在一个文件中,因此不必担心与定义和内存分配分开实现。我将修复原始文件中的所有内容。我的问题是为什么编译这段代码我有这个消息:

test.cc:在函数'int main()'中:test.cc:86:40:错误:没有匹配函数调用'Cfp::Cfp(GlobalPortId (&)(PortId), CfpDevice*&)' Cfp cfp = 新 Cfp(端口,cfp_device);^ test.cc:86:40: 注意:候选人是:test.cc:70:12: 注意:Cfp::Cfp(const GlobalPortId&, CfpDevice ) 显式 Cfp(const GlobalPortId &id, ^ test.cc:70:12:注意:从 'GlobalPortId(PortId)' 到 'const GlobalPortId&' 的参数 1 没有已知的转换 test.cc:68:7: 注意: Cfp::Cfp(const Cfp&) class Cfp { ^ test.cc:68:7:注意:候选人期望 1 个参数,提供 2 个参数

但是,如果我改变:

为了

有用。

另外,如果我删除

并在 Cfp 创建中实例化:

它也有效。

有没有人可以解释一下:

  1. 为什么允许实例化 Cfp,在同一行调用 GlobalPortId 和 PortId 构造函数?但是单独实例化它们时是不允许使用的。
  2. 为什么不允许使用不强制转换的“端口”实例化 Cfp?
0 投票
2 回答
445 浏览

c++ - 在构造函数定义中调用函数后收到分段错误 11 错误?

我已经研究过这个错误,它似乎在危险的内存分配或过载中很常见,但我找不到适用于我的代码的地方。基本上我一直收到错误消息:

分段错误:11

每次我在参数化 Fraction 构造函数定义中调用我的简化函数后运行我的代码。这很有趣,因为当我在这个定义中调用change函数时,它被完全忽略了。我试图弄清楚如何让更改至少可以工作,这样我就可以弄清楚如何正确应用simple,但我已经做了很多年了,但我仍然不知所措。

我有三个文件:fraction.h、fraction.cpp 和 main.cpp。Main.cpp 是由我的教授编写的——这是一个创建头文件和实现文件以允许他的代码运行的作业。此特定部分的说明是:

一个称为simplified的私有成员函数将分数减少到最低项(12/15 => 4/5)。如果编写函数,则应在参数化构造函数定义中调用简化函数,以便以简化形式创建函数。

//分数.h:

//fraction.cpp【不受影响的函数除外】:

//适用的 main.cpp 摘录:

0 投票
4 回答
1057 浏览

c# - 为什么我的 C# 构造函数不能与我尝试使用的方法一起使用?

也许我误解了构造函数的工作原理,但无论如何,我试图创建一个数组并将其填充到构造函数中。

我有以下代码 -

Visual Studio 2012 坚持该方法具有返回类型。我只是在 BuildDeck 方法中添加了“void”,错误就消失了,但是我看到的每个构造函数示例都必须与类同名,并且它是类中唯一的方法。

0 投票
2 回答
357 浏览

java - 如何将一个构造函数的值设置为另一个构造函数的值?

我目前正在我的大学学习 Java 初学者课程,并且仍在学习编程基础知识。本周我们一直在学习构造函数,而我本周任务的后半部分被困住了,所以任何帮助都将不胜感激。

实验室第二部分(我坚持的部分)的方向如下:

为下面的类图中给出的类 Truck 编写完整的代码。确保不要在构造函数中使用重复的代码。例如,具有 2 个参数的构造函数应该调用具有 1 个参数的构造函数来设置圆柱体的值。

这些是它希望我制作的构造函数。

  • Truck()
  • Truck(int cylinders)
  • Truck(int cylinders, String manufacturer)
  • Truck(int cylinders, String manufacturer, double load)
  • Truck(int cylinders, String manufacturer, double load, double tow)

关于如何做到这一点的任何解释/示例都会令人惊叹