我已经读过类似的问题,但所提供的解决方案对我来说并不适用.
我想调用存在于另一个位于不同.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)
当我执行代码时,永远不会打印嘿.我认为解决方案是使函数静态,但这对我没用.
电话应该是
Controller::AlbumOps::SayHey();
// ^^
// double-colon
Run Code Online (Sandbox Code Playgroud)你应该把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++最烦恼的解析").)
| 归档时间: |
|
| 查看次数: |
1845 次 |
| 最近记录: |