在映射中使用前向前声明类的错误

error for forward declaration of class before usage in a map

本文关键字:声明 错误 映射      更新时间:2023-10-16

我是c++的初学者。我不太了解地图或其他静态容器的使用情况。在我的程序中,我定义了一个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. 保持group类的前向声明,并像std::map <Int,>。指针类型在代码中可能会有问题。

  2. 删除前向声明,并包含包含类组声明的头文件。看来这对你来说是一个公平的解决方案。还是要看上下文。如果必须隐藏头文件包含,以优化编译时效率。