如何在成员函数中创建动态对象?

时间:2015-04-11 19:08:34

标签: c++ dynamic

在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();
}

2 个答案:

答案 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;
}

Coliru:http://coliru.stacked-crooked.com/a/84f7641e5c4fa2f3