为什么编译器会抱怨返回的Settings
是未定义的,而将其作为参数接受却很高兴?
foo.hpp
class Foo {
public:
typedef struct{
int id;
} Settings;
Settings GetSettings();
void SetSettings(Settings settings);
};
foo.cpp
// nope
Settings Foo::GetSettings(){
}
// no problem
void Foo::SetSettings(Settings settings){
}
最佳答案
您需要告诉编译器Settings
在Foo
的范围内,因为它是在其中定义的。
这样编译就可以了:
//foo.cpp
Foo::Settings Foo::GetSettings(){
}
在类内部,无需指定该名称,因为编译器会考虑该类范围内的所有名称。
在这个定义中,
//foo.cpp
void Foo::SetSettings(Settings settings){
}
编译器知道您正在定义
Foo
函数,因此类似地,您不必为函数参数Settings
指定编译器应查看的范围。似乎编译器应该知道
GetSettings
也是Foo
的功能。这基本上是正确的,实际上,这可以正常编译:auto Foo::GetSettings() -> Settings {
}
在这种情况下,编译器在必须确定返回类型的时候便知道在哪个范围内查找返回类型。
关于c++ - C++方法定义不了解类类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61257540/