错误C2079:' myMath'使用未定义的类&mathcools

时间:2014-10-26 12:20:06

标签: c++

我有一个名为Utils.h的文件。我在里面放了一些课。这些类的名称是:PointEdgeConemathTools。我还有两个名为RedBlackTree.hRedBlackTree.cpp的文件类RedBlackTree的声明和实现。我的main()函数在source.cpp中。我可以同时包含Utils.hRedBlackTree.h,但没有问题。但是当我将Utils.h包含在RedBlackTree.h'我面临错误C2079。我听说它是​​因为标题中的循环依赖,但我不能在这里。 另一个奇怪的错误是:error C2370: 'max_input_size' : redefinition; different storage class如果我在"Utils.h"中不包含RedBlackTree.h,则会再次出现此错误。

修改
如果我写mathTools *myMath;而不是mathTools myMath;而对其他课程这样做我就不会有这个问题。

My Utils.h看起来像这样:

#include <cstdlib>
#include <algorithm>
#include <string>
#include <map>

#define PI 3.14159265358979323
#define and &&
#define or ||

#define TETA 30.0f
#define OMEGA 0.15f

const int max_input_size = 50;
//const unsigned long long INF = 2147483647;
#define INF 2147483647


class Point{
public:
/*
Some Functions
*/

private:
/*
. . . 
*/
};

class Edge{
public:
// . . . 
private:
// . . . 
};

class Cone{
public:
// . . .
};

class mathTools{
public:// . . . 
private:// . . .
};

RedBlackTree.h

#include "Utils.h" //if I comment this line, there wont be error C2097 

#pragma once

// class prototype
template <class Comparable>
class RedBlackTree;

template <class Comparable>
class RBTreeNode{
    /*
    .
    .
    .
    */
friend class RedBlackTree<Comparable>;
};

template <class Comparable>
class RedBlackTree
{
public:
    //...

private:
    //...
};

source.cpp

#include "Utils.h"
#include "RedBlackTree.cpp"


//____________________GLOBAL VARIABLES
mathTools myMath; //error C2079: 'myMath' uses undefined class  'mathTools'
              // and there are lots of errors after it

std::vector<Cone>cones;
std::vector<Point>input;
std::vector<Edge> outLawEdges;

bool E[max_input_size][max_input_size] = { false };
double t_sp[max_input_size][max_input_size] = { (double)INF };
double FW[max_input_size][max_input_size] = { (double)INF };
double dist[max_input_size][max_input_size] = { (double)INF };

int main(){
// . . . 
}

1 个答案:

答案 0 :(得分:3)

在C和C ++编程语言中,#include保护,有时称为宏保护,是一种特殊的构造,用于避免在处理include伪指令时出现双重包含问题。将#include guards添加到头文件是使该文件具有幂等性的一种方法。(Wikipedia)。像这样更改您的Utils.hRedBlackTree.h

#ifndef UTILS_H
#define UTILS_H
//Utils.h codes 
#endif

#ifndef RED_BLACK_TREE_H
#define RED_BLACK_TREE_H
//RedBlackTree.h codes
#endif