C ++ SFML成员初始化程序

时间:2014-04-08 04:54:57

标签: c++ sfml

此刻我真的很困惑。自从我触及C ++以来我已经有一段时间了,我想再次回到它,所以我尝试使用SFML,并且我一直在使用指南。得到我的是这段代码。

Game::Game():mWindow(sf::VideoMode(640, 480), "SFML Application") {
}

它完美无缺,我想我明白了。它正在初始化mWindow,当构造mWindow时,它会创建窗口。没问题。但是当我把这段代码放下来时。

Game::Game() {
    mWindow(sf::VideoMode(640, 480), "SFML Application");
}

它给了我错误Type 'sf::RenderWindow' does not provide a call operator我不知道这意味着什么,也不理解这两个代码块是如何不同的。

3 个答案:

答案 0 :(得分:2)

mWindow应该是类数据成员,而不是函数。

First block of code simply initializes it.

答案 1 :(得分:1)

它给你的错误是因为在你的第二个例子中,这个:

mWindow(sf::VideoMode(640, 480), "SFML Application");

应该是这样的:

mWindow = sf::VideoMode(640, 480), "SFML Application";

无论如何都不会起作用,因为sf:RenderWindow继承自sf::NonCopyable

错误实际上非常具有描述性,'sf :: RenderWindow'不提供呼叫运算符mWindow的类型为sf::RenderWindow。你试图调用它就像一个函数mWindow(),它不是。{/ p>

您应该在第一个示例中使用初始化列表。这将确保mWindow成员构建一次

答案 2 :(得分:0)

这称为Constructor Initialization Lists,在第二个例子中它应该是这样的:

Game::Game() {
    this.mWindow = new sf::RenderWindow(sf::VideoMode(640, 480), "SFML Application");
}