【问题标题】:Code::blocks complaining about type of parameterCode::blocks 抱怨参数类型
【发布时间】:2015-04-27 16:44:42
【问题描述】:

我正在构建一个 3D 游戏引擎。我用其他语言构建了许多,但最终决定获得 C++ 的速度优势(尽管不是特别了解它)。

我有一个名为EngineOptions 的类,用于存储有关如何初始化引擎的信息。引擎的主类Monolith 然后采用const 对选项实例的引用,如下所示:

monolith::EngineOptions options();
monolith::Monolith engine(options);

Monolith 有一个正确的头文件和这样的构造函数:

Monolith::Monolith(const EngineOptions& options) :  m_options(options)
{
    m_window(m_options.windowWidth, m_options.windowHeight, m_options.windowTitle);
}

虽然我认为这是正确的,但编译器抱怨有:

no matching function for call to 'monolith::Monolith::Monolith(monolith::EngineOptions (&)())'

对不起,如果我是愚蠢的,但我认为这段代码是正确的,我错了吗?
我将 Code::Blocks IDE 与我系统上提供的标准 GCC 工具链一起使用。

【问题讨论】:

  • 您刚刚遇到了最令人头疼的解析问题。当您执行monolith::EngineOptions options(); 时,您声明了一个名为options函数,它返回一个monolith::EngineOptions
  • monolith::EngineOptions options(); 你的问题——那条线应该做什么?
  • 好的,非常感谢你们,我以为我在初始化变量,就像我在参考书中读到的那样,但我想这是不正确的;我该如何正确地做到这一点,特别是如果它不是像这样的空构造函数?

标签: c++ reference compiler-errors codeblocks


【解决方案1】:

去掉这行的括号:

monolith::EngineOptions options();

编译器认为您正在声明一个返回 EngineOptions 实例的函数。

【讨论】:

  • 好的,非常感谢。我试图初始化变量,就像我在 Java 中使用 ``` EngineOptions options = new EngineOptions(); ``` 我怎样才能在 C++ 中正确地做到这一点?非常感谢。
  • 初始化。你有一个EngineOptions 的实例,它调用了它的默认构造函数。它不是引用或指针;不需要new
  • 哦,好的,非常感谢@RitchieHindle。如果构造函数不为空,它会像我初始化 Monolith 的实例一样工作吗?
猜你喜欢
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
相关资源
最近更新 更多