【问题标题】:Can't using constructor c++不能使用构造函数 C++
【发布时间】:2017-04-05 07:22:53
【问题描述】:

我有 Game 类的构造函数,它定义了一个 Deck。 Game.cpp:

Game::Game(char*configurationFile):turn(0), playingPlayer(0)
{
    vector<Card*> vec;
    deck(vec);
    initialState ="";
}

Game.h:

private:
    Deck deck;

Deck 的构造函数:

Deck::Deck(vector <Card*> vec):deck(vec), NumOfCard(vec.size()){}

当然它只是代码的一部分,但我不断收到错误

对“(Deck) (std::vector&)”的调用不匹配

在线:deck(vec); 我不明白为什么。感谢大家的帮助!

【问题讨论】:

  • 好吧,deck(vec) 不是构造函数调用。甚至不在以deck 作为子对象的对象的构造函数中。这就是 ctor-initializer-list(您已经拥有)的用途。
  • 对,如果你想要的话,你应该有 deck =vec; 而不是 deck(vec);
  • @BenVoigt 所以请帮助我。我不明白,我该怎么写?
  • 恐怕是时候打开课本开始阅读了,Kiprin。您似乎继承了您不理解的代码,也不理解所提供的正确解决方案。这表明在有人向您提供更多您不理解的代码之前应该填补信息空白。
  • @marcinj:这仍然是错误的。如果要初始化deck,则必须在构造函数的成员初始化列表中写入deck(vec)。否则,您所做的只是事后分配。

标签: c++ pointers object vector constructor


【解决方案1】:

让我们在这里订购。在 Game.h 文件中,您希望声明所有类成员和类函数(在某些情况下,您甚至可以在标头中为您的函数提供实现,或者将它们写为内联,但事实并非如此) 所以Game.h

private:
   vector<Player *> players;  //The list of the players
   Deck deck;
   string initialState; int turn; int playingPlayer;

请注意,您不需要创建本地对象,因为在构造函数完成后您可能不需要该向量。此外,如果您有一个子对象作为类成员,除非您在 init-list 中对其进行初始化,否则它将使用默认构造函数构造,因此原始代码中的调用会调用复制赋值运算符。 你可以在这个简单的代码中看到这一点:

http://coliru.stacked-crooked.com/a/87521f4578736d78

您确实可以在 CPP 文件中实现构造函数,因此 Game.cpp

Game::Game(char *configurationFile):turn(0), playingPlayer(0),initiateState(""), deck(vector<Card *>()){}

现在,您可能想要构建甲板:

Deck::Deck(const vector<Card *>&vec){ //implement according to your class}

请注意,在您的代码中,您在 deck(vec) 中进行了一个非常奇怪的调用,也许您的意思是 Deck(vec),这也没有意义,因为它是对构造函数本身的递归调用。

希望能有所帮助。

【讨论】:

    猜你喜欢
    • 2022-06-13
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2017-07-25
    • 2016-11-05
    相关资源
    最近更新 更多