【发布时间】:2010-11-05 13:04:01
【问题描述】:
通过启动类对象,我遇到了一个奇怪的问题。 这个问题很奇怪,也不容易重现。但是,我将尝试举一个说明性的例子。 我有继承类。
class BarClass {
public:
BarClass() {
...
}
BarClass(int i, int j) {
...
}
void doSomething() { ... }
};
class FooClass : public BarClass {
public:
FooClass() {
}
FooClass(int i, int j) : BarClass(i,j) {
...
}
};
有时如果我用以下方式初始化对象,我会通过初始化得到分段错误错误。
FooClass foo1;
foo1.doSomething();
FooClass foo2(10, 20);
foo2.doSomething();
如果我使用显式指针new,那么没关系..
FooClass *foo1= new FooClass();
foo1->doSomething();
FooClass foo2(10, 20);
foo2.doSomething();
以下代码将在第 2 行给我一个编译器错误。
FooClass foo1();
foo1.doSomething();
FooClass foo2(10, 20);
foo2.doSomething();
我应该如何正确地初始化一个对象,尤其是当它有默认构造函数和带有参数的对象时。
【问题讨论】:
-
你在第 42 行有一个错误,就在这些点之间。
-
这完全是关于构造函数和
doSomething()所做的事情——这就是用户 VJo 想要告诉的。请输入足以重现问题的完整类定义。 -
-1 这个问题本质上是“我的密码有问题,出了什么问题,顺便说一下,这里还有一些其他代码甚至无法编译”。
-
别含糊,做个王牌;写一个合适的测试用例! tinyurl.com/so-hints sscce.org xs4all.nl/~weegen/eelis/iso-c++/testcase.xhtml (虽然我不会在这么新的问题上投反对票,但你一定要解决这个问题。)
-
不应该 FooClass() {} 是: FooClass() : BarClass() {} 您还可以将基类和派生类中的构造函数之一声明为“显式”以避免混淆编译器。
标签: c++ class object constructor segmentation-fault