-1

我读过与此类似的问题,但提供的解决方案对我不起作用。

我想调用位于不同 .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";
        }
    }

当我执行代码时,Hey 永远不会被打印出来。我认为解决方案是使函数静态,但这对我不起作用。

4

1 回答 1

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";
        }
        // ...
    }
    // ...
    

(为了记录,你当前的

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

确实是在本地声明一个名为SayHey不带参数并返回 a的函数Controller::AlbumOps(搜索“C++ most vexing parse”)。)

于 2013-08-25T10:17:13.930 回答