Closed. This question needs debugging details。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

6年前关闭。



Improve this question




我有一个名为Utils.h的文件。我在里面放了一些课。这些类的名称是:PointEdgeConemathTools。我还有另外两个文件RedBlackTree.hRedBlackTree.cpp,它们保存着RedBlackTree类的声明和实现。我的main()函数在source.cpp中。我可以在其中同时包含Utils.hRedBlackTree.h,这没有问题。但是当我在'RedBlackTree.h'中包括Utils.h时,我会遇到错误C2079。我听说这是因为 header 中存在循环依赖关系,但我在这里无法做到。
另一个奇怪的错误是:error C2370: 'max_input_size' : redefinition; different storage class,如果我不在"Utils.h"中不包括RedBlackTree.h,则不会发生此错误。

编辑:
如果我写mathTools *myMath;而不是mathTools myMath;并为其他类这样做,我将不会遇到此问题。

我的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:// . . .
};

红黑树
#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(){
// . . .
}

最佳答案

在C和C++编程语言中,#include保护器(有时称为宏保护器)是一种特殊的结构,用于避免在处理include指令时出现双重包含的问题。在头文件中添加#include保护是使该文件幂等的​​一种方法。(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

关于c++ - 错误C2079: 'myMath'使用未定义的类'mathTools ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26572918/

10-11 23:19