【问题标题】:"Can't resolve constructor" when using type alias inside class在类中使用类型别名时“无法解析构造函数”
【发布时间】:2016-11-12 16:02:08
【问题描述】:

我对 C++ 还很陌生,所以如果我在这里太天真,请原谅我。我有一个证明我的问题的 sn-p:

template<typename _T, typename _Key, typename _Val>
class Foo {
    typedef std::pair<_Key, _Val> _P1;
    using _P2 = std::pair<_Key, _Val>;

    _T *t = new _T();
    _P1 *p1 = new _P1();
    _P2 *p2 = new _P2(); // (IDE) error: can't resolve constructor '_P2'
}

我的理解是using等价于typedef。为什么前两个声明有效,但我的 IDE 标记了第三个声明?此外,它编译没有错误,我可以很好地获得_P2* 指针。这是怎么回事?

【问题讨论】:

  • It works for me 您使用的是哪个 IDE?哪个版本?
  • CLion 2016.2.3,带有最新更新。
  • 以下划线后跟大写的标识符保留给实现。使用它们不是一个好主意。你不能保证代码会编译,或者如果它编译会产生任何特定的效果。
  • 很高兴知道,C++ 解析起来相当复杂,而且我用于 C++ 的所有 IDE 都不可避免地有误报和误报(例外是正确配置的 libclang 设置,但 AFAIK CLion 不为此使用 libclang)。所以一般来说,你的 IDE 标记了一些东西,并不意味着它是错误的。尝试编译它,如果它编译,要么你的 IDE 配置错误,要么是一个错误。
  • 感谢 cmets,我会带他们上船的。

标签: c++ c++11 templates clion


【解决方案1】:

这绝对是 CLion 中的 bug

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    相关资源
    最近更新 更多