Closed. This question needs debugging details。它当前不接受答案。
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
6年前关闭。
Improve this question
我有一个名为Utils.h的文件。我在里面放了一些课。这些类的名称是:
另一个奇怪的错误是:
编辑:
如果我写
我的Utils.h看起来像这样:
红黑树
source.cpp
和
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
6年前关闭。
Improve this question
我有一个名为Utils.h的文件。我在里面放了一些课。这些类的名称是:
Point
,Edge
,Cone
和mathTools
。我还有另外两个文件RedBlackTree.h
和RedBlackTree.cpp
,它们保存着RedBlackTree
类的声明和实现。我的main()函数在source.cpp
中。我可以在其中同时包含Utils.h
和RedBlackTree.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.h
和RedBlackTree.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