【问题标题】:Strange character added while compilation, leads to an error编译时添加了奇怪的字符,导致错误
【发布时间】:2016-09-27 13:40:02
【问题描述】:

使用 Visual Studio Express 2013 编译项目时,出现此错误

....\WDL\IPlug\IPlugVST3.cpp(199):错误 C2065:“Lp”:未声明的标识符 [D:\wdl-ol\IPlugExamples\MyFirstPlugin\MyFirstPlugin-vst3.vcxproj]

奇怪的是文件IPlugVST3.cpp不包含Lp而只包含p

 switch (p->Type())
  {
    case IParam::kTypeDouble:
    case IParam::kTypeInt:
    {
      Parameter* param = new RangeParameter( STR16(p->GetNameForHost()), // <---- this line
                                             i,
                                             STR16(p->GetLabelForHost()),
                                             p->GetMin(),
                                             p->GetMax(),
                                             p->GetDefault(),
                                             0, // continuous
                                             flags,
                                             unitID);

      param->setPrecision (p->GetPrecision());
      parameters.addParameter(param);

为什么 C++ 编译器将它理解为 Lp 而不是 p

注意:我检查了是否没有隐藏的 unicode 字符(是否存在?)但没有...

【问题讨论】:

  • STR16 是宏吗?你能提供它的代码吗?
  • 我希望 STR16 是宏,它需要一个字符串文字作为参数,例如#define STR16(s) L##s 或类似的。
  • @PaulR 真的!如果您将其发布为答案,我会接受。
  • 在回答此问题之前,您需要出示您的minimal reproducible example
  • @Basj:当然 - 评论现在转换为答案。

标签: c++ visual-studio-2013


【解决方案1】:

STR16 很可能是一个宏,它需要一个字符串文字作为参数,例如

#define STR16(s) L##s

或类似的东西。如果您传递一个变量而不是字符串文字,那么您将得到类似于您正在观察的问题的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2017-05-24
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多