c++ - 说明此场景中的类和范围
问题描述
我目前正在使用 JUCE 框架创建一个音频 VST 插件来掌握和学习,但只是想澄清一些与课程相关的基本内容。
在我的头文件中,我有一个类EQPLUGProcessor
,并且在该类中我调用static juce::AudioProcessorValueTreeState::ParameterLayout createParameterLayout();
当我在 .cpp 中调用该函数createParameterLayout()
时,我必须编写juce::AudioProcessorValueTreeState::ParameterLayout EQPLUGAudioProcessor::createParameterLayout(){}
我的问题是,为什么我必须 juce::AudioProcessorValueTreeState::ParameterLayout
在函数所在的实际范围之前包含 ( EQPLUGAudioProcessor
)?当然,我应该告诉编译器查看,仅此 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()
{
// ...
}
如果类方法返回 avoid
而不是你仍然必须编写如下内容:
void store::something_cool()
{
// ...
}
你已经明白了,你不能只写void something_cool
() 并定义这个类方法。这只会用这个名字定义一些不相关的函数。
您必须编写store::something_cool
,因为此定义不再出现在store
范围内。
好吧,同样的事情不仅适用于类方法,也适用于内部类(以及在某些封闭范围内声明的其他类型的符号)。由于give_me
不是在全局范围内声明的类,它是一个内部类,当在全局范围内时,您必须将其引用为store::give_me
.
这就是 C++ 的工作原理。还有各种复杂的规则来定义作用域的开始和结束位置,就 C++ 的语法而言,这与此相关。在某些情况下,可以利用这些范围规则并通过使用auto
带有尾随返回类型的声明来避免显式范围引用;但是如何做到这一点将在其他时候成为一个不同的问题。
推荐阅读
- ios - Quicklook 无法显示没有文件扩展名的文档
- swift - 只与某些物理实体交互而忽略其他实体
- docker - Pycharm中的Docker:远程文件X.py映射到本地路径Y.py,找不到
- mysql - 优化 MySQL 中连接键/值对表的查询
- node.js - post request with express error can't set headers after sent to clients 是否可以在 post req 中使用 fetch
- pandas - 如何在 REST API 调用之间实现缓存 pandas 数据帧值?
- c# - httpcontext.current.server.mappath 返回错误的路径
- python - pandas:groupby 1 列,求和,并删除重复的行
- google-app-maker - 如何使用 onBeforeSave 事件跟踪记录的关系值何时发生变化?
- unit-testing - Flutter:单元测试