gpt4 book ai didi

c++ - 说明此场景中的类和范围

转载 作者:行者123 更新时间:2023-12-04 03:25:39 26 4
gpt4 key购买 nike

我目前正在使用 JUCE Framework 创建一个音频 VST 插件来掌握和学习,但只想澄清一些与类相关的基本内容。

在我的头文件中,我有一个类 EQPLUGProcessor,在该类中我调用了 static juce::AudioProcessorValueTreeState::ParameterLayout createParameterLayout();

当我在我的 .cpp 中调用函数 createParameterLayout() 时,我必须编写 juce::AudioProcessorValueTreeState::ParameterLayout EQPLUGAudioProcessor::createParameterLayout(){}

我的问题是,为什么我必须在函数所在的实际范围 (EQPLUGAudioProcessor) 之前包含 juce::AudioProcessorValueTreeState::ParameterLayout?当然,我应该告诉编译器查看 EQPLUGAudioProcessor,仅此而已?

我知道 EQPLUGAudioProcessor 是一个类,它全部在里面,但似乎仍然无法理解何时、何地以及为什么我需要再次澄清函数来自的类 在 .cpp 中?

如果这需要澄清,请告诉我。

最佳答案

不必指定封闭的命名空间或类仅在同一命名空间或类内:

class store {

class give_me {

// ...

};

static give_me something_cool();
};

这里,something_cool() 的声明只需要引用give_me,而不是store::give_me。这是因为此声明出现在其类的声明中

现在已经声明了这个类,是时候定义它的类方法了,一切都必须拼写出来:

store::give_me store::something_cool()
{
// ...
}

如果类方法返回的是 void,您仍然必须编写如下内容:

void store::something_cool()
{
// ...
}

您已经明白您不能只编写 void something_cool() 并定义此类方法。这只会用这个名称定义一些不相关的函数。

您必须编写 store::something_cool 因为此定义不再出现在 store 范围内。

好吧,同样的事情不仅适用于类方法,也适用于内部类(以及在某些封闭范围内声明的其他类型的符号)。由于 give_me 不是在全局范围内声明的类,它是一个内部类,当在全局范围内时,您必须将其引用为 store::give_me

这就是 C++ 的工作原理。还有各种复杂的规则定义范围的开始和结束位置,关于 C++ 的语法,这与此无关。在某些情况下,可以利用这些范围规则并通过使用带有尾随返回类型的 auto 声明来避免显式范围引用;但如何做到这一点将在其他时间成为一个不同的问题。

关于c++ - 说明此场景中的类和范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67649734/

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