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

时间:2013-08-25 10:15:40

标签: c++ namespaces

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

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

我试图调用函数的代码:

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

我试图打电话的功能:

#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";
        }
    }

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

1 个答案:

答案 0 :(得分:5)

  1. 电话应该是

            Controller::AlbumOps::SayHey();
            //                  ^^
            //                  double-colon
    
  2. 您应该将static放在类内函数声明中,而不是类外函数定义(这意味着完全不同的东西,“内部链接”) )。那就是:

    标题中的

    AlbumOps.hpp ):

    // ...
    namespace Controller
    {
        class AlbumOps {
        public:
            // ...
            static void SayHey(); // Note: 'static' here
        };
    }
    // ...
    

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

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

    或:

    // ...
    namespace Controller
    {
        // ...
        void AlbumOps::SayHey() // Note: no 'static', no repeated 'Controller::'
        {
            cout << "Hey\n";
        }
        // ...
    }
    // ...
    
  3. (记录,你当前的

            Controller::AlbumOps SayHey();
            //                  ^
            //                  space
    

    在本地声明一个名为SayHey的函数,它不带参数并返回Controller::AlbumOps(搜索“C ++最烦恼的解析”)。)