【问题标题】:Math involving complex numbers does not compile (E0349) [closed]涉及复数的数学无法编译(E0349)[关闭]
【发布时间】:2022-12-09 21:33:08
【问题描述】:

我在 MS Visual Studio 2022 中创建了一个 C/C++ 控制台项目,编译器不喜欢以下表达式:

 (short)(32768 * cexpf(I * phase));

其中 I 扩展为 _Complex_I 并且 phase 是一个浮点值。我该如何解决?

我有问题的另一个表达是:

inputval * cexpf(-I * j * phase_inc);

其中 inputval 是一个短值,phase_inc 是一个浮点数,j 是一个整数。

我正进入(状态:

E0349: 没有运算符“*”匹配这些操作数

E0349: 没有运算符“-”匹配这些操作数

【问题讨论】:

  • C 和 C++ 是非常不同的语言。请不要同时标记两者,除非您询问它们的区别。
  • 也请创建一个合适的minimal reproducible example给我们看。并将完整和完整的构建日志复制粘贴(作为文本)到问题中。
  • 显示的错误是由 C++ 编译器生成的。不要使用 C 标签
  • 通常不可能从单行代码诊断编译器错误。请将您的帖子扩展到 minimal reproducible example,其中包含您遇到问题的行。
  • 但是 E0349 不是编译器错误,而是智能感知错误。所以这些错误本身不会阻止你的程序编译。这个问题有很多不清楚的地方。

标签: c++ windows visual-studio


【解决方案1】:

MSVC 不像 gcc 那样支持复杂类型。它使用 struct 来表示复数。您收到的错误消息是因为 I 具有这些结构之一的类型,并且不能在结构上使用 * 运算符。

要创建复数常量的等价物,您需要使用_FCbuild_Cbuild_LCbuild来构建它们。

所以不是这个:

I * phase

用这个:

_FCbuild(0, phase)

有关 MSVC 中复数支持的更多详细信息,请参阅this page

【讨论】:

    猜你喜欢
    • 2019-06-24
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    相关资源
    最近更新 更多