我有下面的代码可以编译和执行,没有错误,但是应该不会打印menu()函数中应该打印的行。

Menu.cpp

#include "stdio.h"
#include "Menu.hpp"
#include <iostream>
using namespace std;

namespace View
{
 void Menu::startMenu()
    {
    cout << "2\n";
    }
}

Menu.hpp
#ifndef MENU_H //"Header guard"
#define MENU_H

namespace View
{
class Menu
    {
    void startMenu();
    };
}
#endif

我编写了一个简单的测试来调用菜单函数,如果它正常工作,则输出应为
1个
2
3

但是2永远不会打印。

MenuTest.cpp
#include "Menu.hpp"
#include "stdio.h"
#include <iostream>
using namespace std;

int main()
{
    cout << "1\n";
    View::Menu startMenu();
    cout << "3\n";
}

有人可以看到这里发生的事情吗?

最佳答案

View::Menu startMenu();

声明一个返回View::Menu类型的函数,也称为most vexing parse

要初始化对象并调用其成员函数,您应该执行以下操作:
View::Menu menu;
menu.startMenu();

顺便说一句,您需要公开startMenu()函数:
class Menu
{
public:    //<-----
    void startMenu();
};

参见live sample
帮助这有帮助。

10-07 16:09