预期的初级表达之前(

时间:2011-10-05 01:34:40

标签: c++ maps

this -> gamesMap.insert(pair<int, int (*)[2]>(const &currentPos/3,const &dataArray));

我不认为,需要更多代码,但我无法看到我在这里做错了什么。

1 个答案:

答案 0 :(得分:2)

简答:

变化:

this->gamesMap.insert(pair<int, int (*)[2]>(const &currentPos/3,const &dataArray));

为:

this->gamesMap.insert(std::pair<int, int (*)[2]>(currentPos/3, &dataArray));

这可能不太正确(正确答案取决于dataArray的类型),并且可能会导致其他问题(例如,如果gamesMap中对的生命周期超过dataArray的生命周期,那么您将结束使用无效指针。)


长答案

在这一行中,您试图调用std::pair<int, int (*)[2]>的构造函数:

this->gamesMap.insert(pair<int, int (*)[2]>(const &currentPos/3,const &dataArray));

您试图将const &currentPos/3作为第一个参数传递,将const &dataArray作为第二个参数传递。我不确定你在这里尝试做什么,但这些都不是语法正确的。 const只能用于对象的声明,例如:

//Declare `a` to be a const int
int const a(10);
//Declare `b` to be a reference to a const int
//(in this case, a reference to `a`)
int const& b(a);
//Declare `c` to be a pointer to a const int
//(in this case, the the address of `a` is used)
int const* c(&a);

const是声明中的注释,它向正在声明的对象的描述中添加更多信息。传递参数时,参数采用表达式的形式。表达式的类型可以由编译器推导出来,因此不需要额外的注释。此外,C ++中没有语法来提供这样的注释。

您要传递的内容是currentPos除以3,以及dataArray的地址。

评估为“currentPos除以3”的表达式为“currentPos/3”。

评估为“dataArray的地址”的表达式为“&dataArray”。

这意味着(如简答),你应该写:

this->gamesMap.insert(std::pair<int, int (*)[2]>(currentPos/3, &dataArray));