在地图中使用之前的类的前向声明的错误

时间:2014-06-21 06:18:16

标签: c++ class map stl

我是c ++的初学者。我不太了解地图或其他stl容器的用法。在我的计划中,我定义了一个class group和一个map<int,group>mymap

它是一个非常长的代码,大部分都是无关紧要的,所以我给它的一小部分如下:

map<int, group>idgroup;
class group;    //forward reference

class user
{
private:
  int w;
  int d;
  float p;
public:
  int present_gid;
  friend void calcprice(int*, int);

}c[50];

class group
{
  private:
  int g_id;
  int td;

public:
  vector<int>members;
  group* next;

  group()
  {
    td = 0;
    next = NULL;
  }
}

void calcp(int* id, int n)
{
  int gid,Td;
  float p=0.01,q=0.1,r=8,cpu;
  for(int i=0; i<n; i++)
  {
    gid = c[id[i]].present_gid;
    group g = idgroup.find(gid)->second;
    Td = g.td;
    cpu = (p*pow(Td,2) + q*Td + r)/Td;
    c[id[i]].p = cpu*c[id[i]].d;
  }
}

int main()
{
  int n;
  cin>>n;
  int *grp_id = new int[n];
  calcp(grp_id, n);
  return 0;
}

当我在class之前发出地图声明时,我收到以下错误:

error:‘group’ was not declared in this scope map<int, group>mymap;

当我给出类的前向声明时,我收到以下错误:

error: forward declaration of ‘class group’ class group;

我无法理解问题所在。请帮忙。 谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您必须根据具体情况选择解决方案。

  1. 按原样保持组类的声明,并声明你的mymap如std :: map&lt; int,group *&gt;。在代码中使用指针类型会有问题。取决于具体情况。

  2. 删除前向声明并包含包含类组声明的头文件。看来这对您来说可能是一个公平的解决方案。再次取决于上下文。如果必须隐藏头文件包含以优化编译时效率。这不合适。