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 的错误图片
您可以将此视为 intellisense 本身的错误。但是您可以通过隐藏有问题的代码来解决它。例如,
#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;
}
我正在关注一本关于 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 的错误图片
您可以将此视为 intellisense 本身的错误。但是您可以通过隐藏有问题的代码来解决它。例如,
#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;
}