我已经读过类似的问题,但所提供的解决方案对我来说并不适用。
我想调用另一个位于不同.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";
}
}
当我执行代码时,永远不会打印嘿。我认为解决方案是使函数保持静态,但这对我没用。
答案 0 :(得分:5)
电话应该是
Controller::AlbumOps::SayHey();
// ^^
// double-colon
您应该将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
的函数,它不带参数并返回Controller::AlbumOps
(搜索“C ++最烦恼的解析”)。)