2

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

菜单.cpp

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

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

菜单.hpp

#ifndef MENU_H //"Header guard"
#define MENU_H

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

我写了一个简单的测试来调用菜单功能,如果它工作正常,输出应该是 1 2 3

但 2 从未打印过。

菜单测试.cpp

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

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

有人可以看到这里发生了什么吗?

4

3 回答 3

2
View::Menu startMenu();

声明一个返回 View::Menu 类型的函数,也被称为最麻烦的解析

要初始化一个对象并调用它的成员函数,你应该这样做:

View::Menu menu;
menu.startMenu();

顺便说一句,您需要公开 startMenu() 函数:

class Menu
{
public:    //<-----
    void startMenu();
};

现场样品。帮助 这有帮助。

于 2013-08-25T07:24:40.087 回答
1

当减去 的括号时View::Menu startMenu();,代码

View::Menu startMenu;

是View::Menu的一个对象定义,它不调用函数Menu::startMenu()。那"cout << "2\n";"就是不执行的时候。进一步致电Menu::startMenu()

startMenu.startMenu();
于 2013-08-25T07:26:45.943 回答
1

因为您声明了函数“startMenu()”,即返回类型“View:Menu”但是您不调用函数 startMenu()。

尝试制作以下代码:

View::Menu obj;
obj.startMenu();

PS。并将 startMenu() 设为公开:

class Menu
{
    public:
        void startMenu();
};
于 2013-08-25T07:29:34.883 回答