【发布时间】:2020-09-02 23:27:18
【问题描述】:
我正在尝试将函数放置在 struct 中,该 struct 是类的一部分(此处命名为 menu),因此我可以修改专用设置 cpp 文件中的结构(我正在尝试这样做以便我可以在单个源文件中修改我的应用程序中我想要的所有功能,而不是更改所有 cpp 文件中的内容):
// Menu.h
class menu
{
public:
menu();
struct pages
{
void print_page_1();
void print_page_2();
};
};
// Setup.cpp
struct menu::pages
{
void print_page_1()
{
// ...
}
void print_page_2()
{
// ...
}
};
然后当我尝试在我的结构中调用函数时遇到错误:
int main()
{
menu myMenu();
myMenu.pages.print_page_1(); // error: type name is not allowed
}
这个错误是什么意思,我该如何避免它? 谢谢!
【问题讨论】:
-
您对
struct menu::pages有两个定义——一个在struct menu内,一个在struct menu之外。当struct或class类型被多次定义时,两者都需要相同(本质上指定为相同的一组标记)以满足单一定义规则和不同的编译单元。如果编译器在一个编译单元中看到两个定义,它可以识别两个定义并进行诊断。要定义menu::pages的成员函数,请避免重新定义结构 - 而是直接定义成员(例如void menu::pages::print_page_1() {})