Visual Studio 2017:如何让 intellisense 接受来自其他 class 的友元转换构造函数?

Visual Studio 2017: How to make intellisense accept friend conversion constructor from other class?

我正在关注一本关于 2008 年转换章节的书。在 visual studio 2017 C++ 项目上编译。

书上有一个使用转换构造函数的例子,其中class有"complex"和"number"存在,"number"可以转换成"complex" through the use of constructor where class "number" befriended the constructor of class "complex" 让它使用 "number" 私有属性(据我所知) .

书中的代码示例(逐字复制)让智能感知不满意,因为它没有看到朋友 "complex(number)" 构造函数,我不知道为什么。

代码如下:

#include <string>

class number;
class complex;

int main()
{
    return 0;
}

class complex
{
private:
    double real;
    double imaginary;
public:
    complex(double r = 0, double i = 0) : real(r), imaginary(i) {}
    complex(number);
};

class number
{
    double n;
    std::string description;

    //friend complex::complex(number); // finds no instance of overload of function complex::complex

public:
    number(int k, std::string t = "no description") : n(k), description(t) {}
};

complex::complex(number ob)
{
    //real = ob.n;  //no friend, no access to private property
    imaginary = 0;
}

我的问题是,为什么 intellisense 看不到 "friend complex::complex(number);"?

来自 IDE 的错误图片

您可以将此视为 本身的错误。但是您可以通过隐藏有问题的代码来解决它。例如,

#ifdef __INTELLISENSE__
    #define INTELLIHIDE(...) // Hide from IntelliSense
#else
    #define INTELLIHIDE(...) __VA_ARGS__
#endif

那么,你可以这样做:

    INTELLIHIDE(friend complex::complex(number);)

还有,

complex::complex(number ob)
{
    INTELLIHIDE(real = ob.n;)
    imaginary = 0;
}