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

C++ C++;SFML成员初始值设定项,c++,sfml,C++,Sfml,我现在真的很困惑。我接触C++已经有一段时间了,我想重新回到它,所以我试着使用SFML,我用的是一个向导。让我着迷的是这段代码 Game::Game():mWindow(sf::VideoMode(640, 480), "SFML Application") { } 它工作得很好,我想我能理解。它正在初始化mWindow,当构建mWindow时,它将创建窗口。没问题。但是当我放下这个密码的时候 Game::Game() { mWindow(sf::VideoMode(640, 480)

我现在真的很困惑。我接触C++已经有一段时间了,我想重新回到它,所以我试着使用SFML,我用的是一个向导。让我着迷的是这段代码

Game::Game():mWindow(sf::VideoMode(640, 480), "SFML Application") {
}
它工作得很好,我想我能理解。它正在初始化mWindow,当构建mWindow时,它将创建窗口。没问题。但是当我放下这个密码的时候

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

它给了我错误
类型'sf::RenderWindow'没有提供调用操作符
,我不知道这意味着什么,也不知道这两个代码块有什么不同

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


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


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


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

这被称为,实际上在第二个示例中应该是这样的:

Game::Game() {
    this.mWindow = new sf::RenderWindow(sf::VideoMode(640, 480), "SFML Application");
}
这就是所谓的,在你的第二个例子中应该是这样的:

Game::Game() {
    this.mWindow = new sf::RenderWindow(sf::VideoMode(640, 480), "SFML Application");
}
这就是所谓的,在你的第二个例子中应该是这样的:

Game::Game() {
    this.mWindow = new sf::RenderWindow(sf::VideoMode(640, 480), "SFML Application");
}
这就是所谓的,在你的第二个例子中应该是这样的:

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

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

mWindow(sf::VideoMode(640, 480), "SFML Application");
应该是这样的:

mWindow = sf::VideoMode(640, 480), "SFML Application";
它无论如何都不会工作,因为
sf:RenderWindow
继承自
sf::NonCopyable

该错误实际上非常具有描述性,'sf::RenderWindow'不提供呼叫接线员
mWindow
的类型为
sf::RenderWindow
。您试图像调用函数一样调用它,
mWindow()
,但事实并非如此


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

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

mWindow(sf::VideoMode(640, 480), "SFML Application");
应该是这样的:

mWindow = sf::VideoMode(640, 480), "SFML Application";
它无论如何都不会工作,因为
sf:RenderWindow
继承自
sf::NonCopyable

该错误实际上非常具有描述性,'sf::RenderWindow'不提供呼叫接线员
mWindow
的类型为
sf::RenderWindow
。您试图像调用函数一样调用它,
mWindow()
,但事实并非如此


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

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

mWindow(sf::VideoMode(640, 480), "SFML Application");
应该是这样的:

mWindow = sf::VideoMode(640, 480), "SFML Application";
它无论如何都不会工作,因为
sf:RenderWindow
继承自
sf::NonCopyable

该错误实际上非常具有描述性,'sf::RenderWindow'不提供呼叫接线员
mWindow
的类型为
sf::RenderWindow
。您试图像调用函数一样调用它,
mWindow()
,但事实并非如此


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

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

mWindow(sf::VideoMode(640, 480), "SFML Application");
应该是这样的:

mWindow = sf::VideoMode(640, 480), "SFML Application";
它无论如何都不会工作,因为
sf:RenderWindow
继承自
sf::NonCopyable

该错误实际上非常具有描述性,'sf::RenderWindow'不提供呼叫接线员
mWindow
的类型为
sf::RenderWindow
。您试图像调用函数一样调用它,
mWindow()
,但事实并非如此



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

我不认为它是一个函数,它只是sf::RenderWindow的构造函数。我的主要问题是,为什么在构造函数主体外部初始化它可以工作,但在内部却不能工作?我在那个网页上找不到任何东西来说明原因,或者也许我很抱歉,这里所有的答案都是正确的。mWindow不是一个函数,你是对的,但你使用它就像它是一个函数一样@Petr展示了当它不在init-list.Ok中时应该如何使用它,那么如果这是一个函数,那么什么是sf::RenderWindow mWindow(sf::VideoMode(640480),“SFML应用程序”);因为这显然是可行的,尽管窗口不会显示。因为如果你在构造函数中这样做,你只是在创建一个临时对象,它不仅会隐藏名为
mWindow
的成员变量,而且会超出范围并在构造函数末尾销毁。你们需要再读一读关于构造器是如何工作的。好吧,这确实更有意义,谢谢大家,我感谢大家的回答。我当然更了解这一点。我不认为它是一个函数,它只是sf::RenderWindow的一个构造函数。我的主要问题是,为什么在构造函数主体外部初始化它可以工作,但在内部却不能工作?我在那个网页上找不到任何东西来说明原因,或者也许我很抱歉,这里所有的答案都是正确的。mWindow不是一个函数,你是对的,但你使用它就像它是一个函数一样@Petr展示了当它不在init-list.Ok中时应该如何使用它,那么如果这是一个函数,那么什么是sf::RenderWindow mWindow(sf::VideoMode(640480),“SFML应用程序”);因为这显然是可行的,尽管窗口不会显示。因为如果你在构造函数中这样做,你只是在创建一个临时对象,它不仅会隐藏名为
mWindow
的成员变量,而且会超出范围并在构造函数末尾销毁。你们需要再读一读关于构造器是如何工作的。好吧,这确实更有意义,谢谢大家,我感谢大家的回答。我当然更了解这一点。我不认为它是一个函数,它只是sf::RenderWindow的一个构造函数。我的麦