调用在类中声明的结构成员

calling a struct member declared in a class

本文关键字:结构 成员 声明 调用      更新时间:2023-10-16

我正在尝试将函数放置在作为类一部分的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
}

此错误是什么意思,如何避免它? 谢谢!

pagesstruct的名称,它不是一个对象。您需要在menu中有一个类型pages的对象。

否则,您可以在pagesstatic方法,并在不创建对象的情况下调用这些方法。

示例(实时(:

#include <iostream>
struct S
{
struct P
{
void print()
{
std::cout << "Hello from P!n";
}
} p; // object of P
struct Q
{
static void print()
{
std::cout << "Hello from Q!n";
}
};
};
int main()
{
S s;
s.p.print();
S::Q::print();
return 0;
}

输出:

Hello from P!
Hello from Q!

你需要在菜单中声明一个页面对象。

#include <iostream>

class menu
{
std::string p1 = "1";
std::string p2 = "2";
public:
struct pages
{
menu& m;
pages(menu &m):m(m){
}
void print_page_1();
void print_page_2();
} pages;
menu():pages(*this){
}
};
void menu::pages::print_page_1()
{
std::cout << m.p1;// ...
}
void menu::pages::print_page_2()
{
std::cout << m.p2;// ...
}
int main() {
menu myMenu;
myMenu.pages.print_page_1();
// your code goes here
return 0;
}