我有以下代码编译并执行而没有错误,但是应该在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";
}
有人能看到这里发生了什么吗?
答案 0 :(得分:2)
View::Menu startMenu();
声明一个返回View :: Menu类型的函数,也称为most vexing parse
要初始化一个对象并调用它的成员函数,你应该这样做:
View::Menu menu;
menu.startMenu();
顺便说一句,你需要将startMenu()函数设为public:
class Menu
{
public: //<-----
void startMenu();
};
见live sample。 帮助这有帮助。
答案 1 :(得分:1)
当减去View::Menu startMenu();
的括号时,代码
View::Menu startMenu;
是View :: Menu的对象定义,它不调用函数Menu :: startMenu()。那就是"cout << "2\n";"
未执行的时间。要进一步拨打Menu::startMenu()
:
startMenu.startMenu();
答案 2 :(得分:1)
因为你声明了函数“startMenu()”,那就是返回类型“View:Menu” 但是你没有调用函数startMenu()。
尝试制作以下代码:
View::Menu obj;
obj.startMenu();
PS。并将startMenu()设为public:
class Menu
{
public:
void startMenu();
};