C ++使用另一个头中的静态类函数,尚未声明“class_name”

时间:2017-04-17 11:30:15

标签: c++ static-functions

编辑: 感谢您指出我在循环依赖的正确方向。我尝试从 Mathfg.h 中删除 #include“datastructure.h”,并在“Matfg.h”中添加了“Class ArithmeticTree”来转发声明它,但是我在CleanExpression函数中得到另一个错误:
无法将'std :: __ cxx11 :: basic_string :: iterator {aka __gnu_cxx :: __ normal_iterator>}'转换为'const char *'以将参数'1'转换为'int remove(const char *) “的。当我将鼠标悬停在“删除”一词上时,Qt告诉我“有太多的争论”。这是在Calculator :: CleanExpression包含的一行代码中。

我正在编写一个数学解析器,我创建了一个头文件 Mathfg ,其中包含一个处理输入的 Calculator 类。到目前为止,我有一个名为 CleanExpression 的静态函数,它只是从输入字符串中删除空格。

我在这里看到了一个类似的问题:Static function declared but not defined in C++,但我无法将答案应用于我自己的问题。

(我省略了不相关的部分,例如 Node 结构的实现,但除了 CleanExpression 调用之外,它都有效。)

Mathfg.h

#ifndef MATHFG_H
#define MATHFG_H

#include <string>
#include "datastructure.h"
using namespace std;

class Mathfg
{
private:
    Mathfg();
};

class Calculator
{
private:
    Calculator();
public:
    static void CleanExpression(string& expression)
    {
        expression.erase(remove(expression.begin(), expression.end(), ' '), expression.end());
    }
};

#endif // MATHFG_H

注意:我没有使用Mathfg.h的源文件。

Datastructure.h

在另一个标题“Datastructure.h”中,我修复输入并产生输出。我想从“Mathfg.h”调用静态函数 CleanExpression ,但是我收到错误:'计算器'尚未声明

#ifndef DATASTRUCTURE_H
#define DATASTRUCTURE_H

#include <iostream>
#include <string>
#include "mfg\mathfg.h"
using namespace std;

struct ArithmeticTree
{
private:
    struct Node
    {
        // Doing some unrelated stuff here
    };

public:
    ArithmeticTree()
    {

    }
    ArithmeticTree(string expression_in)
    {
        Calculator::CleanExpression(expression_in);     // <- Here's the problem!
        // Doing some unrelated stuff here
    }

    // Doing some unrelated stuff here
};

#endif // DATASTRUCTURE_H

注意:我不使用Datastructure.h的源文件。

做什么工作:

在我的游戏循环中,我可以成功运行此代码:

std::string str = "2 +3-4 /      5";
cout << "Cleaning string:\t'" << str << "'\n";
Calculator::CleanExpression(str);
cout << "Cleaned:\t\t'" << str << "'\n";

......输出:

Cleaning string:    '2 +3-4 /      5'
Cleaned:            '2+3-4/5'

...但是当我尝试从“Datastructure.h”中调用 Calculator :: CleanExpression 时 - 或者更具体地说,从 ArithmeticTree 的构造函数 - 我得到上述错误。我从来没有在我的代码中的任何地方创建过计算器 Mathfg 对象;我只是把它的静态函数称为我通常期望的行为。

我确信我误解了静态函数在C ++中是如何工作的,这可能也是我错误的原因。

我真的想要一些关于如何解决这个问题的技巧!

我正在使用 Qt Creator 4.2.1 MinGW 5.3.0 32bit2

0 个答案:

没有答案