gpt4 book ai didi

c++ - 在 map 中使用前类的前向声明错误

转载 作者:行者123 更新时间:2023-11-28 06:49:10 27 4
gpt4 key购买 nike

我是 C++ 的初学者。我不太了解 map 或其他 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 之前给出 map 声明时我收到以下错误:

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

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

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

我不明白是什么问题。请帮忙。谢谢!

最佳答案

我认为您必须根据上下文来解决。

  1. 保持组类的前向声明不变,并像 std::map < int, group *> 一样声明你的 mymap。在您的代码中使用指针类型会有问题。取决于上下文。

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

关于c++ - 在 map 中使用前类的前向声明错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24338909/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com