C++SFML成员初始值设定项

C++ SFML member initializer

本文关键字:成员 C++SFML      更新时间:2023-10-16

我现在真的很困惑。我已经有一段时间没有接触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,我不知道这意味着什么,也不理解这两个代码块的区别。

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

第一个代码块简单地初始化它。

它给您的错误是因为在第二个示例中

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

应该是这样的:

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

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

该错误实际上是描述性的,的"f::RenderWindow"没有提供调用运算符。CCD_ 5属于CCD_。您试图像调用函数mWindow()一样调用,但事实并非如此。

您应该在第一个示例中使用初始值设定项列表。这将确保mWindow成员被构造一次

这被称为构造函数初始化列表,在第二个例子中应该是这样的:

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