gpt4 book ai didi

c++ - 为什么内联在这里不起作用?

转载 作者:行者123 更新时间:2023-11-28 07:21:55 25 4
gpt4 key购买 nike

编辑:大道歉 - 我在 gUniverse 之后声明了 gTime,但在被要求提供更多代码后将其错误地张贴在这里。我将它与我的程序的早期版本混淆了,实际上它是相反的。

我有一个类 gUniverse,它包含一个指向类 gTime 的另一个对象的实例的指针的声明;

class gUniverse;
class gTime;

class gUniverse
{
public:
gUniverse():UniverseTime(new gTime(1) ){}
~gUniverse();

gTime* UniverseTime;
};

class gTime
{
public:
gTime();
gTime(int start);
void StartTimer();
double ElapsedTime();

private:
clock_t StartTime;
clock_t StopTime;
};

这不会编译为“不完整类型”。

但是,当我进行外部声明时,即:

class gUniverse
{
public:
gUniverse();
~gUniverse();

gTime* UniverseTime;
};

gUniverse::gUniverse():UniverseTime(new gTime(1) )
{
}

那么现在这一切都很酷。我想了解问题出在哪里,以及第二种情况是否可以解决,因为我处理了所有析构函数和复制构造函数。

最佳答案

这是重要的表达:

new gTime(1)

除非编译器知道 gTime 类的接口(interface),否则无法编译这行代码。例如,它需要查看它是否具有可以接受 int 的构造函数或可以将 1 作为单个参数的其他构造函数。

一个解决方案是将整个 gTime 类移动到更靠近文件开头的位置,在 gUniverse 类之上。

或者,您可以将此 new ... 移动到文件的后面,在 gTime 下方。您通过将该定义移到类之外并移至:

gUniverse::gUniverse():UniverseTime(new gTime(1) )    {   }

然而,只有当您将它放在 gTime 类之后时,它才有效。如果您只是将它放在 gUniverse 类之后和 gTime 类之前,那么这是行不通的。所以这并不是关于内联还是外部——重要的是 gUniverse 构造函数的这个定义必须在 gTime 类之后。

关于c++ - 为什么内联在这里不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19323310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com