在Class Championship的成员函数中,我尝试创建动态对象并调用类Game的成员函数,但我收到错误消息error: expected primary-expression before '[' token
。如何纠正?
class Championship
{
public:
Championship(string,int);
void CreateGame();
void display();
private:
int gamenum;
};
class Game
{
public:
friend class Championship;
void Getteam();
};
void Championship::CreateGame()
{
Game *game = new Game[gamenum];
for (int i = 0; i < gamenum; i++)
Game[i].Getteam();
}
答案 0 :(得分:1)
您在代码中遇到的确切问题就在于这一点
Game *game = new Game[gamenum];
for (int i = 0; i < gamenum; i++)
Game[i].Getteam();
这里的主要问题是你声明了一个类型为Game
的数组,并将其称为game
,但之后你尝试使用Game
进行访问,这就是类型,所以只需交换它回到game
会解决这个问题。
但是,不需要以这种方式使用原始指针。 std::vector
在这里有很多优势。它允许您以安全的方式动态地将更多和更多的对象添加到容器中。我即将展示如何在Championship::CreateGame()
函数中使用std :: vector ...但我无法确定它正在尝试做什么...
我也不明白你为什么在你的游戏课中拥有friend
行...这是用于给另一个课程“完整”的#39;访问您的课程,即Championship
课程可以访问Game
的私人成员。
答案 1 :(得分:-1)
编辑虽然这个答案没有直接解决问题,但它确实为分配用户定义对象数组提供了一种有用的替代语法。
使用经典的C风格双指针数组(即来自int main(int argc,char ** argv)的argv)可能无法解决这个问题。这样的代码首先会为数组分配空间,然后使用带索引的循环为每个单独的对象分配空间。
#include <iostream>
class Foo
{
public:
//Constructor to ensure each object is unique with an int + loop
Foo(int k)
: i(k)
{}
int i;
int operator() () {return i;}
};
int main ()
{
//Arbitrary number for allocation; get this somehow
int i = 5;
//Although it can be unsafe, allocate an array of pointers with a pointer to pointer
Foo** array = new Foo*[i];
for (int j = 0; j < i; ++j)
{
array[j] = new Foo(j);
//Here, I use operator() to test that each object is unique.
std::cout << (*array[j])() << std::endl;
}
//Using Coliru, the program will work and print out this
std::cout << "this worked!\n";
return 0;
}