使用命名空间时,简单函数不起作用

Simple function not working when using namespaces

本文关键字:简单 函数 不起作用 命名空间      更新时间:2023-10-16

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

菜单.cpp

#include "stdio.h"
#include "Menu.hpp"
#include <iostream>
using namespace std;
namespace View
{
 void Menu::startMenu()
    {
    cout << "2n";
    }
}

菜单.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 << "1n";
    View::Menu startMenu();
    cout << "3n";
}

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

View::Menu startMenu();

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

要初始化一个对象并调用它的成员函数,您应该执行以下操作:

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

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

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

参见活样本。帮助这有帮助。

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

尝试制作以下代码:

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

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

class Menu
{
    public:
        void startMenu();
};

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

View::Menu startMenu;

是View::Menu的对象定义,它不调用函数Menu::startMenu()。也就是说,不执行CCD_ 2。要进一步调用Menu::startMenu():

startMenu.startMenu();