Visual Studio 2017: как заставить intellisense принимать конструктор преобразования друзей из другого класса? - PullRequest
1 голос
/ 27 февраля 2020

Я слежу за книгой с главой о конверсиях 2008 года. Компиляция на проекте Visual Studio 2017 C ++.

В книге был пример использования конструктора конвертации, где классы "complex" и "number" «Существуют, и« число »может быть преобразовано в« сложное »с помощью конструктора, где класс« число »поддерживает конструктор класса« сложный », чтобы позволить ему использовать частные свойства« число »(насколько я понимаю).

И пример кода из книги (скопированное слово в слово) делает intellisense неудовлетворенным, так как он не видит конструктора "сложных (число)" друзей, и я не знаю, почему.

Код как показано ниже:

#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 не виден?

Изображение ошибки из среды IDE image of IDE error

1 Ответ

0 голосов
/ 29 февраля 2020

Вы можете думать об этом как об ошибке в . Но вы можете обойти это, скрыв соответствующий код. Например,

#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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...