在映射中使用前向前声明类的错误
error for forward declaration of class before usage in a map
我是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;
我不明白是什么问题。请帮助。谢谢你!
我认为你必须根据具体情况找到解决方案。
-
保持group类的前向声明,并像std::map <Int,>。指针类型在代码中可能会有问题。
-
删除前向声明,并包含包含类组声明的头文件。看来这对你来说是一个公平的解决方案。还是要看上下文。如果必须隐藏头文件包含,以优化编译时效率。
相关文章:
- 在气泡排序程序中未声明错误功能
- 未在此范围内声明错误 'xy'
- 在此范围内未声明错误"Clreol"
- 为什么 C 编译器不在 for 循环体中给出重新声明错误?
- 如何修复范围内的字符串声明错误
- 如何修复C++中的"arrStud未在此范围内声明"错误
- 无法识别的模板声明错误 - 不明白我做错了什么
- C 如何从构造函数中声明(错误C2065未宣布的标识符)
- C 无法解释的类“尚未声明”错误,这是由于名称空间而导致的
- 如何解决声明错误
- 在标题文件中获取声明错误
- 异常声明错误
- "inet_ntoa"未声明错误
- #include <string> 导致很多'<blank>'尚未声明错误
- 类声明错误
- C++成员函数未声明错误时(当它看起来是错误时)
- 代码块 HelloWorld C 示例不起作用:未声明错误"ptrdiff_t"
- 头文件类成员函数声明错误:"incomplete type name in nested name specifier"
- 预期语句和预期声明错误 c++
- 针对 android 编译的问题..."未在此范围内声明"错误