在不创建对象的情况下在C++中调用函数

Daw*_*son -1 c++ namespaces

我已经读过类似的问题,但所提供的解决方案对我来说并不适用.

我想调用存在于另一个位于不同.cpp文件中的类的函数.我不想创建对象的实例,我只想使用该函数.

我的代码试图调用该函数:

    switch (option)
        {
        case 1:
        cout << "\nDoing stuff\n\n" ;
        Controller::AlbumOps SayHey();
        //SayHey should have run but isn't working
        break;
Run Code Online (Sandbox Code Playgroud)

我试图调用的函数:

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


    namespace Controller
    {
        static void Controller::AlbumOps::SayHey ()
        { 
        cout << "Hey\n";
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我执行代码时,永远不会打印嘿.我认为解决方案是使函数静态,但这对我没用.

gx_*_*gx_ 5

  1. 电话应该是

            Controller::AlbumOps::SayHey();
            //                  ^^
            //                  double-colon
    
    Run Code Online (Sandbox Code Playgroud)
  2. 你应该把static一流函数声明,不乱类的函数定义(它意味着完全不同的东西,"内部链接").那是:

    在标题(AlbumOps.hpp)中:

    // ...
    namespace Controller
    {
        class AlbumOps {
        public:
            // ...
            static void SayHey(); // Note: 'static' here
        };
    }
    // ...
    
    Run Code Online (Sandbox Code Playgroud)

    并在实现文件(AlbumOps.cpp)中:或者:

    // ...
    void Controller::AlbumOps::SayHey() // Note: no 'static'
    {
        cout << "Hey\n";
    }
    // ...
    
    Run Code Online (Sandbox Code Playgroud)

    要么:

    // ...
    namespace Controller
    {
        // ...
        void AlbumOps::SayHey() // Note: no 'static', no repeated 'Controller::'
        {
            cout << "Hey\n";
        }
        // ...
    }
    // ...
    
    Run Code Online (Sandbox Code Playgroud)

(记录,你当前的

        Controller::AlbumOps SayHey();
        //                  ^
        //                  space
Run Code Online (Sandbox Code Playgroud)

是本地声明一个名为SayHey不带参数的函数并返回一个Controller::AlbumOps(搜索"C++最烦恼的解析").)