gpt4 book ai didi

c++ - 非成员函数的问题

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:59 25 4
gpt4 key购买 nike

我正在处理的一个问题是要求我在类主体中定义一个 istream 构造函数。我们称这个类为 Sound。现在这个构造函数在它自己的主体中使用了一个函数。但是该函数应该是一个非成员函数。我在另一个文件中定义了它,但我在包含类定义本身的 header 中声明了它。我已经将 header 放在另一个包含非成员函数的文件中。

问题是,非成员函数的参数之一具有类型 Sound,并且它对类型 Sound 对象执行操作。

当我在头文件中声明这个函数时,如果我把它放在类定义之前,我会得到一个错误,指出对象还没有被定义。

当我将声明放在定义之后时,构造函数现在告诉我它体内的函数是未定义的。

如果我将声明放在类主体中,它就变成了一个成员函数。

问题没有明确指出我不能使该函数成为成员函数,所以我想知道是否有办法克服这个 catch-22。

最佳答案

您不一定需要使函数成为成员。您至少可以有两种方法以不同的方式解决它。

问题是,如果我理解正确的话,您在 Sound 对象尚未定义的情况下会遇到所有这些问题。

1) 您可以重构您的代码,如下所示。

header 文件:

class Sound
{
public:
Sound();

doStuff();
}

cpp 文件:

void non_member_function(Sound sound)

Sound::Sound() { non_member_function(*this); }
Sound::doStuff() {}

void non_member_function(Sound sound) { sound.doStuff(); }

2) 如果您坚持上述场景,您可以在非成员函数之前放置一个Sound sound 前向声明以获得类型识别。或者,您可以将声明放在类声明之后。

header 文件:

class Sound
{
public:
Sound();

doStuff();
}

void non_member_function(Sound sound)

cpp 文件:

Sound::Sound() { non_member_function(*this); }
Sound::doStuff() {}

void non_member_function(Sound sound) { sound.doStuff(); }

关于c++ - 非成员函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18541925/

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