“声明没有声明任何内容”错误的原因是什么?

时间:2015-06-10 14:45:11

标签: c++

如果你有一个名为'Rock'的课程,你可以这样做: -

int main()
{
    Rock;
}

为什么你得到“声明没有声明任何内容”错误?

它不应该只调用默认构造函数并在那一刻创建对象吗?

当然,我将无法使用该对象,当它超出函数范围时会被销毁,但为什么不创建它呢?

在java等其他编程语言中,变量不是强制性的。你可以做一些像 new Rock()这样的事情,你会没事的。

我知道这没什么用,但我想清除我的困惑。

6 个答案:

答案 0 :(得分:5)

Rock只是班级的名称。没有声明变量名称。要调用构造函数/创建对象,您需要声明变量的名称:Rock r;

这会在堆栈上创建一个对象,当它超出范围时会被销毁

答案 1 :(得分:1)

Rock; 

此实例化代码错误。

如果必须调用默认构造函数,则必须按如下方式命名对象。

Rock rd;

在C ++中Rock是一种自定义类型。

因此,要定义Rock类型的变量,您必须遵循以下语法

Typename variableName

答案 2 :(得分:1)

在Java中,调用new Rock();将创建一个临时对象,可能会立即收集垃圾,因为它没有绑定到引用。 在C ++中,您可以使用Rock{};执行相同的操作,但现在您可以保证对象将立即被销毁

答案 3 :(得分:0)

如果要调用构造函数,请使用

Rock( )

虽然我不太了解你在这里尝试做什么。 你基本上只是说明没有实际对象的类型。

Rock *someRock = new Rock( );

在C ++中是合法的,它在堆上而不是在堆栈上创建一个对象。
(注意,一旦delete someRock;不再需要该对象,你必须释放内存。)

Example

答案 4 :(得分:0)

你可以这样做:

Rock();

但是那个目标是什么?

答案 5 :(得分:0)

要使这个声明或表达具有两个可能性。第一个确实是宣言

int main()
{
    class Rock;
}

此声明在函数main的范围内声明(或重新声明)类Rock。

第二个创建类的临时对象,调用其默认构造函数

int main()
{
    Rock();
}

使用函数调用语法调用构造函数。

考虑到在C ++中你也可以使用operator new。但是,应将操作符返回的值分配给指针。否则会有内存泄漏。 C ++没有垃圾收集器。

所以

的内容
new Rock();

你应该写

Rock *r = new Rock();

或者您甚至可以通过以下方式重新声明名称Rock

Rock *Rock = new class Rock();