我无法调用单例类的成员函数。我有以下
// my_class.hpp
class my_class {
friend struct singleton;
int m_x;
my_class(int x)
: m_x(x) {}
// other private constructors here
public:
const auto& get() const {
return m_x;
}
};
struct singleton {
static auto& instance() {
static my_class x(42);
return x;
}
};
当试图在main()之外调用singleton::instance().get()
时,编译器会说“函数声明符之后的预期函数体”。这是相关的主文件:
singleton::instance().get();
int main() {}
我发现在主要内部移动呼叫一切正常。我还发现将结果存储在main之外也可以正常工作,如此
auto v = singleton::instance().get();
int main() {}
我想了解的是为什么在main()之外调用它会失败,如果有一个解决方法不需要存储结果。谢谢。
答案 0 :(得分:0)
C ++标准说:
3.5程序和链接1程序由一个或多个链接在一起的翻译单元(第2章)组成。翻译单位 由一系列声明组成。
这一行:
auto v = singleton::instance().get();
是变量的声明,但这一行
singleton::instance().get();
调用方法instance
和get
,编译器将其视为已声明的函数声明。
答案 1 :(得分:0)
首先,它与单身人士无关。
main
是该计划的入口。编译器在main之前做的是一些声明:变量,函数,类。 auto v = singleton::instance().get();
很好,它是全局变量的声明。显然,编译器将singleton::instance().get();
作为函数的声明,但实际上并非如此。