Консольные приложения Windows могут выводить широкие строки (L"..."
) непосредственно на терминал, если режим установлен правильно. Обратите внимание на использование wcout
. Сохраните следующий источник в кодировке UTF-8:
#include <iostream>
#include <io.h>
#include <fcntl.h>
using namespace std;
int main()
{
_setmode(_fileno(stdout), _O_U16TEXT);
wcout << L"┏━━━━━━━━━━━━━━━━━┓" << endl;
wcout << L"┃" << endl;
}
Скомпилируйте с помощью «cl / EHsc / utf-8 test.cpp». Выход:
┏━━━━━━━━━━━━━━━━━┓
┃
Если я помню хорошо, можно 'предварительно объявить' класс B.
class B; // predeclaration of class B
class A
{
public:
void doSomething(B* b);
}
class B
{
public
void doSomething(A* a) {}
}
public void A::doSomething(B* b) {}
Затем Ваш класс ',' знание, что класс 'B' будет, существует, хотя он еще не был действительно определен.
Предописание является действительно правильным термином, как упомянуто Evan Teran в комментариях.
Да. Вам нужно предописание:
class B; // add this line before A's declaration
class A {
public:
void doSomething(B *b) {};
};
class B {
public:
void doSomething(A *a) {};
};
вперед объявите один класс перед другим с
class B;
or
class A;
Но тем не менее Вы не сможете реализовать
void doSomething(B *b)
использование только предописания B. Таким образом, необходимо поместить определение doSomething ниже полного объявления класса A
FAQ C++ Облегченные ответы этот вопрос и другие. Я был бы, серьезно рассматривая читающий ту вещь вплотную, или получающий книгу и делающий то же.
Можно попробовать предописание как
class B;
class A {
void Method( B* );
};
class B{
};
но Вы только сможете объявить указатель и ссылочные переменные для B затем. Если Вы хотите больше (как метод, который разыменовывает B* переменная), можно обеспечить объявление только и определить методы позже в том же файле - в точке, где оба объявления классов уже доступны.
Необходимо передать, объявляют B.
class B;
class A
{
public:
void doSomething(B *b) {}
};
class B
{
public:
void doSomething(A *a) {}
};
(И BTW, Вам не нужны точки с запятой после фигурных скобок функции членства.:))
Добавьте другое объявление B прежде A:
class B;
class A {
public:
void doSomething(B *b) {};
};
class B {
public:
void doSomething(A *a) {};
};