【问题标题】:Exact same C++ Code works in Visual Studio but not in Xcode完全相同的 C++ 代码适用于 Visual Studio,但不适用于 Xcode
【发布时间】:2014-01-25 00:17:27
【问题描述】:

这是一个 C++ 类的作业,它可以在 Windows 上的 Visual Studio 2013 中完美编译和运行,但我主要在 Vim 或 Xcode 中的 OSX 上编写代码。
XCode 立即在该行中向我显示错误“没有匹配的构造函数用于初始化 'Vector'”,当我尝试使用 Makefile 和终端进行编译时也是如此。

    Vektor C = A + B; // !!! no matching constructor for initialization of 'Vector'

然而,

    Vektor B = A;
    A + B;

在 OSX 和 Windows 上都能完美运行。
我没有尝试导出/导入项目文件,它在每个环境中都是全新的文件。

完整代码:http://pastebin.com/xabY0w08

这是一个已知问题吗?如果是,为什么会发生?有什么办法可以让它发挥作用?

【问题讨论】:

  • 您是否忘记创建复制构造函数参数const
  • 您在代码中用 k 拼写 Vektor,但在错误中却用 c 拼写?
  • 在此过程中,请检查您之前的警告日志。当您使用非标准扩展时,VS 应该警告您,这就是其中之一。 VS 支持来自右值的非常量引用;标准没有。
  • 还请注意,即使进行了以下更改,您也只能填写 Rule of Three 的 2/3。您还应该实现一个赋值运算符(如果愿意,还应该实现一个移动构造函数和一个移动赋值运算符)

标签: c++ xcode visual-studio class compiler-errors


【解决方案1】:

将复制构造函数定义为具有对类对象的 const 引用。例如

Vektor( const Vektor & );

【讨论】:

  • +1 或者更好。制作一个适当的 move 构造函数,因为 OP 在两个平台上都使用 C++11(大部分)兼容的工具链。
  • 这不会立即修复它,但我会研究它并尝试制作必要的构造函数。
  • 谢谢弗拉德。你救了我们的培根。
  • @Oliver Spryn 你是什么意思?
【解决方案2】:

你必须改变:

Vektor(Vektor &quelle);

Vektor(const Vektor &quelle);

原因是临时对象(A+B) 不能绑定到非常量引用,

【讨论】:

    【解决方案3】:

    Vektor C=A+B;
    

    operator+ 返回 Vektor - 值,但您的构造函数接受 Vektor& - 引用。

    您需要实现一个接收const Vektor& 的构造函数(只需修改您现有的构造函数)。

    它适用于 Windows,因为(不确定)Visual C++ 对 const 引用更为宽松。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-30
      • 2022-10-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 2019-10-10
      相关资源
      最近更新 更多