我有下面的代码可以编译和执行,没有错误,但是应该不会打印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。
帮助这有帮助。