位于同一文件'foo.h'中的非常简单的代码:
class Xface
{
public:
uint32_t m_tick;
Xface(uint32_t tk)
{
m_tick=tk;
}
}
std::map<uint32_t, Xface*> m;
Xface* tmp;
tmp = new Xface(100); **//Error**
m[1] = tmp; **//Error**
tmp = new Xface(200); **//Error**
m[2] = tmp; **//Error**
错误是 错误:在'='标记之前的预期构造函数,析构函数或类型转换 对于每项任务。
答案 0 :(得分:8)
C ++不是脚本语言。您可以声明可执行代码块范围之外的项目,但不能进行任何处理。尝试将错误代码移动到这样的函数中:
int main()
{
std::map<uint32_t, Xface*> m;
Xface* tmp;
tmp = new Xface(100); **//Error**
m[1] = tmp; **//Error**
tmp = new Xface(200); **//Error**
m[2] = tmp; **//Error**
}
答案 1 :(得分:4)
你的代码必须在某个函数中,你不能把它放在void :-)尝试在main中运行相同的代码,看看会发生什么。
答案 2 :(得分:3)
class Xface
{
public:
uint32_t m_tick;
Xface(uint32_t tk)
{
m_tick=tk;
}
} // need a semicolon here
您在类定义的末尾缺少分号。
答案 3 :(得分:2)
您没有默认构造函数。你需要一个不需要任何参数的构造函数。现在,你有一个需要uint32_t
的构造函数,所以你不能new
它们的数组。更不用说,正如Neil指出的那样,缺少分号,以及gruszczy观察到可执行代码需要在函数中。